Rails 4 - Imbriqué avec accepts_nested_attributes_for de configuration du contrôleur?
Je suis en train de faire un formulaire imbriqué avec form_for
et fields_for
. Après beaucoup de recherche et de succès, ne fonctionne pas sur mon projet plus. Je suis juste essayer de recréer un railscast de voir qu'ai-je fait de mal.
Je suis en train de re-créer l'exemple à http://railscasts.com/episodes/196-nested-model-form-part-1 qui ne devrait pas être difficile puisque le code est là, mais je n'arrive pas à créer des questions de l'enquête. Voici mon code jusqu'à maintenant:
rails new surveysays
rails g scaffold survey name:string
rake db:migrate
rails g scaffold question survey_id:integer content:text
rake db:migrate
Je suis en train de faire exactement de la même séquence de la vidéo.
Ma Question modèle:
class Question < ActiveRecord::Base
belongs_to :survey
end
Mon modèle d'Enquête:
class Survey < ActiveRecord::Base
has_many :questions, dependent: :destroy
accepts_nested_attributes_for :questions
end
Mon formulaire d'enquête avec imbriqué questions champs:
<%= form_for(@survey) do |f| %>
...
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<%= f.fields_for :questions do |builder| %>
<p>
<%= builder.label :content, "Question" %><br/>
<%= builder.text_area :content, :row => 3 %>
</p>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Mon sondage montrent:
<p id="notice"><%= notice %></p>
<p>
<strong>Name:</strong>
<%= @survey.name %>
</p>
<ol>
<% for question in @survey.questions %>
<li><%=h question.content%></li>
<% end %>
</ol>
<%= link_to 'Edit', edit_survey_path(@survey) %> |
<%= link_to 'Back', surveys_path %>
Et mon SurveysController:
class SurveysController < ApplicationController
...
# GET /surveys/new
def new
@survey = Survey.new
3.times { @survey.questions.build }
end
...
# POST /surveys
# POST /surveys.json
def create
@survey = Survey.new(survey_params)
respond_to do |format|
if @survey.save
format.html { redirect_to @survey, notice: 'Survey was successfully created.' }
format.json { render :show, status: :created, location: @survey }
else
format.html { render :new }
format.json { render json: @survey.errors, status: :unprocessable_entity }
end
end
end
...
private
# Use callbacks to share common setup or constraints between actions.
def set_survey
@survey = Survey.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def survey_params
params.require(:survey).permit(:name)
end
end
Que jusqu'min 5:34 et c'est quand ça ne fonctionne pas comme indiqué dans la vidéo et ne crée pas de questions, le formulaire s'affiche avec les 3 questions, je remplis le formulaire, mais quand un appuyez sur créer il ne crée pas les questions:
Chargement environnement de développement (Rails 4.1.6)
2.1.3 :001 > s = Enquête.tous
L'enquête de la Charge (3.0 ms) SÉLECTIONNEZ "enquêtes".* DE "sondages"
=> #]>
2.1.3 :002 > q = s[0].questions
La Question de la Charge (de 0,6 ms) SÉLECTIONNEZ "questions".* DE "questions" OÙ "questions"."survey_id" = ? [["survey_id", 2]]
=> #
Je ne peux pas voir la différence entre mon code et l'exemple. J'ai même essayé de faire quelques modifications dans le SurveysController
sans succès:
Insertion question_attributes:[:id ,:contenu] permis de méthode survey_params
ou
L'insertion de @sondage.questions.créer(survey_params[:questions_attributes]) après, si l'enquête.enregistrer sur la méthode de création, ce qui crée à la question, mais avec un contenu: nill
À ce point, je suis coincé. Je ne sais pas ce plus quoi faire, ce qui me manque int le contrôleur?
Quelqu'un peut-il me donner un peu d'aide, merci.
OriginalL'auteur fasantos | 2014-12-29
Vous devez vous connecter pour publier un commentaire.
Sur le
survey_params
méthode dans le contrôleur, il vous manque la question params, il devrait ressembler à:Laissez-moi savoir comment ça se passe!
OriginalL'auteur kurenn
La survey_params doit changer afin de permettre l'imbriqués attributs:
:
questions_attributes: [:id , :content, :_destroy]
peut être un meilleur ajustement si détruisant les associations est également nécessaire.OriginalL'auteur fasantos