次は私のモデル構造協会を通じて使用してレコードとnested_form_forレール
role.rb
has_many :user_roles
has_many :users, through: :user_roles
has_many :companies, through: :user_roles
user.rb
has_one :user_role, dependent: :destroy
has_one :role, through: :user_role
has_one :company, through: :user_role
company.rb
has_many :user_roles, dependent: :destroy
has_many :users, through: :user_roles
has_many :roles, through: :user_roles
user_role.rb
belongs_to :user
belongs_to :role, optional: true
belongs_to :company
である私が関連して、ネストされたフォームを使用してレコードを作成したいと今、私は、ネストされた使用して、ユーザーと一緒に会社を作成することができていますを作成します。私はUserのuser_roleも作成したいと思っています。
私はaccepts_nested_attributes_for :users
を社内モデルに含めました。 を入力し、fields_for
を使用して新しい形式のユーザーを作成します。
次は、今の私のフォーム
<%= form_for @company, html: { multipart: true } do |f| %>
<% if company.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(company.errors.count, "error") %> prohibited this company from being saved:</h2>
<ul>
<% company.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field form-group">
<%= f.label :name %>
<%= f.text_field :name, class: :"form-control" %>
</div>
<div class="field form-group">
<%= f.label :website %>
<%= f.text_field :website, class: :"form-control" %>
</div>
<div class="field form-group">
<%= f.label :phone %>
<%= f.text_field :phone, class: :"form-control" %>
</div>
<div class="field form-group">
<%= f.label :description %>
<%= f.text_area :description, class: :"form-control" %>
</div>
<div class="field form-group">
<%= f.file_field :company_image %>
</div>
<%= f.fields_for :users do |builder| %>
<%= render "users_fields", :f => builder %>
<% end %>
<div class="actions">
<%= f.submit class: :'btn btn-default' %>
</div>
<% end %>
ある会社を作成するときに、USER_ROLEは作成されません。私はどのように進めるか分からない。
ご指摘いただければ幸いです。前もって感謝します。
を動作するはずです 'user_role'は作成されていないので、エラーメッセージまたはそれが作成されていない理由のいくつかの並べ替えがなければなりません。あなたのコントローラコードを含め、 '@ company.errors.full_messages'の出力とあなたのパラメータがどのように表示されているかを確認します。おそらく、 'user_role'は有効ではないので' saving'ではないでしょう。 'user_role'は' belongs_to:user'と 'belongs_to:role、optional:true'を持ちます。 'role'の存在の検証はスキップされますが、有効な' user'が必要です。保存されていないユーザに属する 'user_role'、' user_id'を与えると、検証は失敗します。 –
クイック返信ありがとう@Fabrizio、 私はユーザーを検証しています。 UserRoleは、ユーザーと企業にとって3番目のテーブルです。 user_roleのフィールドはuser_id、role_id、およびcompany_idです。 user_roleおよびuser_roleレコードにrole_idを含めずに、user_roleおよびcompany_idを使用してuser_roleを作成します。 params.require(:company).permit(:name、:website、:phone、:description、:company_image、users_attributes:[:電子メール、:first_name、:last_name、:phone、:string 、:birth_date、:join_date、:性別、:password、:password_confirmation]) ' – wish
' user_role belongs_to user'です。 'user_role.user_id'は、既存の' user'の 'id'に対応していなければなりません。 'users'の行の' id'フィールドです。 'user_role'を保存しようとしたときに、' user'がまだ保存されていなければ、検証エラーが発生し、 'user_role'は保存されません。 'user_role'を作成する前に' user'を保存してください –