簡體   English   中英

我如何使用form_for更新關聯的has_many:through關聯

[英]How can I use form_for to update an association's has_many :through association

在我的member_profile表單中,我希望有一個管理員可見的角色復選框。 我想使用一些嵌套的form_for,但無法使其正常工作,因此我不得不手動創建check_box_tags(請參見下文),然后將其手動添加到member_profile.member。

請注意,成員模型是Devise,並且我不想在我的MemberProfile數據中混入這些字段,以防將來將來更改身份驗證系統。

class Member < ActiveRecord::Base
  has_one :member_profile
  has_many :member_roles
  has_many :roles, :through => :member_roles
end
class MemberProfile < ActiveRecord::Base
  belongs_to  :member
  has_many    :member_roles, :through => :member
  #has_many    :roles, :through => :member_roles #can't make this work work
end
class Role < ActiveRecord::Base
  has_many :member_roles
  validates_presence_of :name
end
class MemberRole < ActiveRecord::Base
  belongs_to :member
  belongs_to :role
end

形式(哈姆爾)

  = form_section do
    - Role.all.each do |x|

      =check_box_tag  'member[role_ids][]', 
                      x.id, 
                      begin @resource.member.role_ids.include?(x.id) rescue nil end
      =x.name

member_profiles_controller.rb

def update
  if @resource.update_attributes params[:member_profile]

    @resource.member.role_ids = params[:member][:role_ids]
    redirect_to(@resource, :notice => 'Member profile was successfully updated.') 
  else
    render :action => "edit" 
  end
end

我已經決定在Update上執行嵌套的has_many:through是唯一有意義的,因為join模型是“ gone through”到達has_many:through模型的原因。 在創建hmt之前,聯接模型中顯然沒有任何記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM