Rails,使用has_many通过和fields_for
问题描述:
我有点麻烦得到这个工作。Rails,使用has_many通过和fields_for
class User < ActiveRecord::Base
has_many :events, :through => :event_users
has_many :event_users
accepts_nested_attributes_for :event_users, :allow_destroy => true, :reject_if => proc { |obj| obj.blank? }
end
class Event < ActiveRecord::Base
has_many :event_users
has_many :users, :through => :event_users
accepts_nested_attributes_for :users, :reject_if => lambda { |a| a[:nick].blank? }, :allow_destroy => true
end
class EventUser < ActiveRecord::Base
set_table_name :events_users
belongs_to :event
belongs_to :user
end
表布局:
events_users
user_id
event_id
is_participating
events
id
name
users
id
name
这是形式
<%= form_for @event do |f| %>
<%= f.fields_for :users, f.object.users do |builder| %>
<%= builder.text_field :name, "Name" %>
<%= f.fields_for :event_users do |builder2| %>
<%= builder2.hidden_field :is_participating, :value => true %>
<% end %>
<% end %>
<% end %>
我试图做到的是设置字段中events_users表is_participating代码,但它不起作用!
答
您的events_users表没有'id'字段作为主键吗?如果您发布了events_users连接表的表格布局,可能会有所帮助。
答
我有这个同样的问题,基本上就是我所做的就是以下几点:
<%= form_for @event do |f| %>
<%= f.fields_for :event_users, @event_user do |builder| %>
<%= builder.hidden_field :is_participating, :value => true %>
<%= f.fields_for :users, f.object.user do |builder2| %>
<%= builder2.text_field :name, "Name" %>
<% end %>
<% end %>
<% end %>
即,我切换嵌套对象的顺序。这要求你通过声明的连接表(你这样做)建立关系。它为我保存了三张桌子上的所有属性。
但是,如果你想保留你的当前模型,我不知道你是否应该为第二级嵌套窗体设置第一级。也就是说,您的f.fields_for:event_users后面应该跟着一个逗号和该类的一个实例。
我已经添加了! – jonepatr 2011-01-11 23:17:42