2012-09-26 33 views
0

我有3種不同的型號是否能把連接查詢到Rails的Active Record協會

class GroupMember < ActiveRecord::Base 
attr_accessible :group_id, :user_id, :owner_id 
has_one :user 
end 

class Group < ActiveRecord::Base 
attr_accessible :name, :owner, :permission 
has_many :groupMembers 
end 

class User < ActiveRecord::Base 
end 

,當IM在groups_controller.rb我想實現與協會

SELECT * FROM groups 
LEFT JOIN group_members ON groups.id = group_members.group_id 
LEFT JOIN users ON group_members.user_id = users.id WHERE users.id = 1 

或以下查詢加入查詢

Group.joins('LEFT JOIN group_members ON groups.id = group_members.group_id LEFT JOIN users ON group_members.user_id = users.id').where('users.id = ?', current_user.id); 

是t他可能嗎?

Group.joins(:user_id => current_user.id) 

回答

0

我相信這是可能的,但實在是有點困難,因爲我沒有與這些表一個DB儘快測試。大概是這樣的:

Groups.joins(:group_members, :user).merge(User.where(:id => current_user.id)) 

但設計是有點奇怪。我想你想獲取所有組針對特定用戶,並且最好是這樣的說:

@user = User.find_by_id(current_user.id) 
@groups = @user.groups 

這個工作,你應該在你的用戶模型groups關聯。

我也不清楚你爲什麼有GroupMember has_one :user。據我所知,該組員只與一個用戶有關,但是用戶可以由不同組別的幾個成員代表?如果是的話,Rails的方式來設計這將是:

class GroupMember < ActiveRecord::Base 
    attr_accessible :group_id, :user_id, :owner_id 
    belongs_to :user 
    belongs_to :group 
end 

class Group < ActiveRecord::Base 
    attr_accessible :name, :owner, :permission 
    has_many :group_members 
    has_many :users, :through => :group_members 
end 

class User < ActiveRecord::Base 
    has_many :group_members 
    has_many :groups, :through => :group_members 
end 
+0

隨着上述設計'User.find(1).groups'給ID爲1 –

+0

的has_many用戶的所有組總是與附加多'類名s'?並belongs_to單個類名? –

+1

是的。同樣''CamelCase'類名稱被轉換爲'snake_case'來獲得關聯名稱。有關關聯的更多信息,請參閱Rails [Active Record Associations](http://guides.rubyonrails.org/association_basics.html) – khustochka