2011-03-11 77 views
0

我有三個模型通過has_many_through關聯連接。過濾器記錄中有很多通過關聯Rails 2.3.x

class Board < ActiveRecord::Base 
has_many :celebrations, :dependent => :destroy 
has_many :users, :through => :celebrations 

class User < ActiveRecord::Base 
has_many :boards, 
     :through => :celebrations 
has_many :celebrations, :dependent => :destroy 

class Celebration < ActiveRecord::Base 
belongs_to :user 
belongs_to :board 

class CreateCelebrations < ActiveRecord::Migration 
    def self.up 
    create_table :celebrations do |t| 
     t.column :board_id,  :int, :null => false 
     t.column :user_id,   :int, :null => false 
     t.column :role,  :string, :null => false 
     t.column :token,  :string 
     t.timestamps 
     end 
    end 

我想獲得用戶角色爲FRIEND的特定董事會的所有用戶。該角色位於Celebrations表中。

我試圖在控制器執行以下操作:

@friends = User.condtions(:celebrations => {:role => "FRIEND", :board_id => session[:board_id]}) 

這導致:

NoMethodError in FriendsController#show 

undefined method `condtions' for #<Class:0x1023e3688> 

我曾嘗試:

@friends = Board.find(session[:board_id]).celebrations.conditions(:role => "FRIEND").joins(:user) 

這導致:

ArgumentError in FriendsController#show 

wrong number of arguments (1 for 0) 

如何獲得具有特定板卡朋友的用戶?

非常感謝您提前。

這工作:

board = Board.find(session[:board_id]) 
@friends = board.users.find(:all, :conditions => ["celebrations.role = ?", "FRIEND"]) 
+2

你有一個錯字 「condtions」 應爲 「條件」 – 2011-03-11 04:50:55

回答

0

我延長在Board.rb文件中的類關聯。

has_many :users, :through => :celebrations do 
      def by_role(role) #great for returning all of the users whose role is FRIEND 
       find(:all, :conditions => ["celebrations.role = ?", role]) 
       end 
      end 

然後我可以在我的控制器中調用以下內容。

board = Board.find(session[:board_id]) 
@friends = board.users.by_role("FRIEND") 

感謝喬希Susser和他blog