В моей форме для member_profile я хотел бы иметь флажки ролей, которые видны для администраторов. Я хотел бы использовать некоторые вложенные form_for, но не могу заставить его работать, поэтому я прибегнул к ручному созданию check_box_tags (см. Ниже), а затем вручную добавил их в member_profile.member.
Обратите внимание, что модель 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