1

これを試してみると、ジョイナーモデルが保存されていません(Account has_many :users, through: :rolesその逆も同様です)。

def new
  @account = current_user.accounts.build
end
def create
  @account = current_user.accounts.build(params[:account])
  @account.save # does not save the joiner model
end

これにより、@ accountと、whereuser_id=current_user.idおよび。のロールレコードが作成されますaccount_id: @account.id。@accountのみが保存されます。ロールモデルにはレコードがありません。結果は、コンソールを使用して一貫しています。

アクションで置換current_user.accounts.buildするとcurrent_user.accounts.createcreateジョイナー(ロールレコード)モデルが保存されます。このため、これは検証の問題ではないと思います。Rails3.2.3を使用しています。

モデル:

class User < ActiveRecord::Base
  has_many :roles
  has_many :accounts, through: :roles
end
class Account < ActiveRecord::Base
  has_many :roles
  has_many :users, through: :roles
  accepts_nested_attributes_for :users
end
class Role < ActiveRecord::Base
  attr_accessible
  belongs_to :users
  belongs_to :accounts
end

意見

<%= simple_form_for(@account) do |f| %>      
  <%= render 'account_fields', f: f %>
  <%= f.submit %>
<% end %>
4

2 に答える 2

1

使用してみてください

更新しました:

class User < ActiveRecord::Base
  has_many :roles
  has_many :accounts, through: :roles, :autosave => true
end

自動保存の詳細については、こちらをご覧ください

またはUserモデルでコールバックを使用する

after_save :save_accounts, :if => lambda { |u| u.accounts } 

def save_accounts 
  self.accounts.save
end
于 2012-05-04T18:02:28.163 に答える
0

これはバグです:https ://github.com/rails/rails/issues/6161#issuecomment-5631018

于 2012-05-18T17:53:16.157 に答える