2011-03-15 4 views
0

member_profile의 양식에 관리자 용 역할 확인란을 표시하고 싶습니다. 중첩 된 form_for를 사용하고 싶지만 작동하지 않을 수 있으므로 check_box_tags (아래 참조)를 수동으로 작성한 다음 수동으로 member_profile.member에 추가해야합니다.form_for를 사용하여 association의 has_many : through 연결을 업데이트하는 방법

회원 모델은 Devise이며, 나중에 인증 시스템을 변경할 경우를 대비하여 내 MemberProfile 데이터와 해당 필드를 섞어 쓰고 싶지 않습니다. 모델을 결합하기 때문에,를 통해 업데이트에 : 나는 그것을 결정했습니다

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 
+0

무엇이 작동하지 않습니까? 당신이 협회를 보여줄 양식을 얻을 수없는 것처럼? 제출할 때 저장하지 않겠습니까? 무엇이 잘못되었는지에 대한 자세한 설명을하십시오. – pjammer

답변

0

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 

양식 (HAML)

= 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는 중첩 된 has_many을 할 의미가 있습니다 has_many : through 모델에 도달하기 위해 '지나간'것입니다. hmt가 작성되기 전에는 조인 모델에 레코드가 분명히 없습니다.