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 %>

私が達成しようとしているのは、フィールド is_participating を events_users テーブルに設定することですが、うまくいきません!

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 %>

つまり、ネストされたオブジェクトの順序を入れ替えました。これには、宣言された結合テーブルを介した関係が必要です (これはあなたが行います)。3 つのテーブルのすべての属性が保存されました。

ただし、現在のモデルを維持したい場合は、2 番目のレベルのネストされたフォームに対して最初のフォームと同じ設定を行うべきではないのではないかと思います。つまり、 f.fields_for :event_users の後にコンマとそのクラスのインスタンスが続く必要があります。

于 2012-11-02T03:15:13.597 に答える
0

events_usersテーブルに主キーとして「id」フィールドがありませんか?events_users結合テーブルのテーブルレイアウトを投稿した場合に役立つ可能性があります。

于 2011-01-11T23:08:53.020 に答える