Voici ma structure modèleCréer un enregistrement à l'aide par l'association et les rails 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
Je veux créer enregistrement en utilisant association et emboîtées et maintenant je suis en mesure de créer la société avec l'utilisateur en utilisant imbriqué formulaire, mais je veux aussi créer user_role pour l'utilisateur.
J'ai inclus accepts_nested_attributes_for :users
dans le modèle de l'entreprise. et utilisé fields_for
pour créer l'utilisateur dans le nouveau formulaire de l'entreprise.
Ce qui suit est ma forme
<%= 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 %>
En ce moment, le user_role n'est pas créé lors de la création de l'entreprise. Je ne suis pas sûr de savoir comment procéder.
Toutes les indications seront appréciées. Merci d'avance.
'user_role' n'est pas créé, il doit y avoir une sorte de message d'erreur ou la raison pour laquelle il ne se crée pas. Incluez votre code de contrôleur, incluez la sortie de '@ company.errors.full_messages' et vérifiez comment vos paramètres apparaissent. Peut-être que le 'user_role' n'est pas' save' car il n'est pas valide. 'user_role' a un' belongs_to: user' et un 'belongs_to: role, optionnel: true'. La validation de la présence de 'role' sera ignorée, mais vous devez avoir un' user' valide. Si vous donnez 'user_role' un' user_id' qui appartient à un utilisateur non enregistré, la validation échouera. –
Merci pour la réponse rapide @Fabrizio, J'ai valider l'utilisateur. UserRole est la troisième table pour l'utilisateur et la société. Les champs pour user_role sont user_id, role_id et company_id. Il crée user_role avec user_id et company_id, mais n'inclut pas role_id dans l'enregistrement user_role. Veuillez regarder dans les paramètres forts 'params.require (: company) .permit (: nom,: site web,: téléphone,: description,: company_image, users_attributes: [: email,: prénom,: nom, téléphone,: string ,: date de naissance,: date_de_participation,: sexe,: mot de passe,: password_confirmation]) ' – wish
'user_role belongs_to user'. 'user_role.user_id' doit correspondre à' l'id 'd'un 'user' existant. Le champ 'id' d'une ligne dans' users'. Si vous essayez d'enregistrer 'user_role' et que' user' n'a pas déjà été sauvegardé, vous déclenchez une erreur de validation et le 'user_role' ne sera pas sauvegardé. Enregistrez le 'user' avant de créer le' user_role' –