2

我很难让它工作。

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 ,但它不起作用!

4

2 回答 2

1

我遇到了同样的问题,基本上我所做的如下:

<%= 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 后面应该跟一个逗号和该类的一个实例。

于 2012-11-02T03:15:13.597 回答
0

您的 events_users 表是否没有“id”字段作为主键?如果您发布了 events_users 连接表的表格布局,可能会有所帮助。

于 2011-01-11T23:08:53.020 回答