2014-07-03 90 views
0

我建立會員制爲我的Rails應用程序,並有以下型號(無驗證和其他一切):編輯的has_many的多個條目,通過關係

class User < ActiveRecord::Base 
    has_many :memberships 
    has_many :subgroups, through: :memberships 
end 

class Subgroup < ActiveRecord::Base 
    has_many :memberships 
    has_many :users, through: :memberships 
end 

成員模型包含自定義屬性,該屬性擁有會員級別。

class Membership < ActiveRecord::Base 
    belongs_to :subgroup 
    belongs_to :user 

    scope :guests, -> { where(role: 0) } 
    scope :users, -> { where(role: 1) } 
    scope :admins, -> { where(role: 2) } 
end 

我希望用戶能夠在一個位置編輯一個組的所有成員資格。每個組應有三個多選字段來選擇管理員,即用戶&。爲了生成表單我使用simple_form。

它應該看起來像this,但用戶名稱(應該是簡單的部分)和預選用戶爲每個用戶級別填充。

f.association等不同的內置解決方案不起作用。我試過這個:users(它產生三個相同的選擇字段)和:memberships

所以我正在尋求幫助建立視圖&控制器。

回答

1

您必須使用範圍的分組,而不是在會員

class User < ActiveRecord::Base 
    has_many :memberships 
    has_many :subgroups, through: :memberships 

    scope :guests, -> { includes(:memberships).where('memberships.role' => 0) } 
    scope :users, -> { includes(:memberships).where('memberships.role' => 1) } 
    scope :admins, -> { includes(:memberships).where('memberships.role' => 2) } 
end 

或更好的使用拉姆達德恩新的關聯你不會有simple_form使用

class Subgroup < ActiveRecord::Base 
    has_many :memberships 
    has_many :users, through: :memberships 

    has_many :only_guests, -> { where('memberships.role' => 0).uniq }, through: :memberships, source: :user 
    has_many :only_users, -> { where('memberships.role' => 1).uniq }, through: :memberships, source: :user 
    has_many :only_admins, -> { where('memberships.role' => 2).uniq }, through: :memberships, source: :user 

end 

觀點:

<%= f.association :only_users, as: :check_boxes, collection: User.all %> 
+0

由於我使用的是simple_form,我在視圖中用'<%= f.association:only_users%>'來嘗試第二個解決方案。但它返回'SQLite3 :: SQLException:no such column:users.role:SELECT DISTINCT「users」。* FROM「users」INNER JOIN「memberships」ON「users」。「id」=「memberships」。「user_id」WHERE 「users」。「role」= 1 AND「memberships」。「subgroup_id」=?' – Pascal

+0

正確!您必須:has_many:only_users, - > {where('memberships .role'=> 1).uniq},通過::會員資格,來源::用戶 – Exsemt

+0

「角色」,是Membership或Subgroup中的屬性? – Exsemt