Je suis nouveau à RoR et j'ai pensé que je pourrais vous demander de l'aide. Je n'ai pas trouvé la réponse spécifique que je cherche.RoR: Formes imbriquées avec plan
J'ai un problème avec une modélisation que je veux faire en utilisant Devise. Devise met en place un modèle de membre, et je souhaite avoir un modèle SuperMember ayant plus d'attributs que Member, et des vues différentes.
Je souhaite configurer un formulaire imbriqué pour créer un SuperMembre, tout en créant automatiquement le compte Membre en arrière-plan.
Member.rb (généré par legs)
class Member < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me
end
SuperMember.rb
class Supermember < ActiveRecord::Base
attr_accessible :first_name, :last_name
belongs_to :member, :dependent => :destroy
accepts_nested_attributes_for :member
end
Supermembers.controllers.rb
def new
@supermember = Supermember.new
@supermember.member = Supermember.build
respond_to do |format|
format.html # new.html.erb
format.json { render json: @supermember }
end
end
def create
@supermember = Supermember.new(params[:supermember])
respond_to do |format|
if @supermember.save
format.html { redirect_to @supermember, notice: 'Supermember was successfully created.' }
format.json { render json: @supermember, status: :created, location: @supermember }
else
format.html { render action: "new" }
format.json { render json: @supermember.errors, status: :unprocessable_entity }
end
end
I essayé de créer une forme imbriquée dans l'ordre pour générer à la fois le membre et le supermember:
<%= simple_form_for(@supermember) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :first_name %>
<%= f.input :last_name %>
</div>
<% # Devise member %>
<%= f.fields_for :member do |m| %>
<div class="form-inputs">
<%= m.input :email, :required => true, :autofocus => true %>
<%= m.input :password, :required => true %>
<%= m.input :password_confirmation, :required => true %>
</div>
<% end %>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
Le problème est que lorsque je soumets ce formulaire, je reçois le message d'erreur suivant:
Can't mass-assign protected attributes: member_attributes
Application Trace | Framework Trace | Full Trace
app/controllers/supermembers.rb:44:in `new'
app/controllers/supermembers.rb:44:in `create'
Je ne comprends vraiment pas comment y remédier. Pourriez-vous m'aider sur celui-ci? Merci beaucoup!
Bienvenue chez SO. Vous n'avez pas besoin de mettre à jour le titre lorsque vous choisissez une réponse, il suffit de marquer la réponse - http://meta.stackexchange.com/a/5235/181382 – mguymon