J'essaie de créer un formulaire imbriqué pour un levé et de rencontrer des problèmes avec mes valeurs de hachage params dans le bloc fields_for
.Rails fields_for params blank
J'ai les modèles suivants. La façon dont l'application fonctionne est qu'un administrateur crée un MiniPost
et son MiniPostQuestions
. Ensuite, un client crée un nouveau MiniPostSurvey
en utilisant l'un des MiniPosts
. Le client envoie alors un e-mail à SurveyInvites
aux utilisateurs. Lorsqu'un utilisateur répond, un nouveau SurveyResponse
est créé, ainsi qu'un nouveau QuestionAnswer
pour chaque MiniPostQuestion
de l'enquête.
class MiniPost < ActiveRecord::Base
has_many :mini_post_questions
has_many :question_answers, through: :mini_post_questions
has_many :mini_post_surveys
belongs_to :employer
def questions
mini_post_questions
end
def surveys
mini_post_surveys
end
end
class MiniPostQuestion < ActiveRecord::Base
has_many :question_answers
belongs_to :mini_post
belongs_to :employer
def answers
question_answers
end
end
class MiniPostSurvey < ActiveRecord::Base
belongs_to :mini_post
belongs_to :employer
belongs_to :company
has_many :survey_invites
has_many :survey_responses, through: :survey_invites
def questions
mini_post.questions
end
end
class SurveyInvite < ActiveRecord::Base
belongs_to :mini_post_survey
has_many :survey_responses
def responses
survey_responses
end
end
class SurveyResponse < ActiveRecord::Base
belongs_to :survey_invite
has_many :question_answers
has_many :mini_post_questions, through: :question_answers
end
class QuestionAnswer < ActiveRecord::Base
belongs_to :survey_response
belongs_to :mini_post_question
validates :answer, presence: true
end
Voici ma forme de réponse.
<div class="form-box">
<%= form_for @response, url: "/survey?key=#{@invite.key}", method: :post, html: { role: 'form' } do |f| %>
<% @questions.each do |question| %>
<div class="form-group">
<%= f.fields_for :mini_post_questions, question do |q| %>
<%= q.fields_for :question_answers, question.question_answers.build do |a| %>
<%= f.label question.question %>
<%= a.text_area :answer, class: 'form-control' %>
<%= a.hidden_field :survey_response_id, value: @survey.id %>
<% end %>
<% end %>
</div>
<% end %>
<div><%= f.submit "Submit", :class => "btn btn-primary" %></div>
<% end %>
</div>
Ma forme rend correctement, mais quand je le soumets, mon hash params ressemble à ceci:
{"utf8"=>"✓",
"authenticity_token"=>"p8Tky2So10TH4FUUvLKhIh7j2vjNN39b3HDsF0cYE14=",
"survey_response"=>{"mini_post_questions"=>{"question_answers"=>{"answer"=>"", "survey_response_id"=>"11"}}},
"commit"=>"Submit",
"key"=>"e4fab42244db2286d471082696",
"controller"=>"surveys",
"action"=>"create"}
je me attends une clé mini_post_question
pour chaque question, mais je ne suis pas sûr de savoir comment arriver à ce point.
Génial! Merci! En rétrospective, je ne peux pas croire que j'ai oublié d'ajouter 'accept_nested_attributes' car c'est tellement basique, mais la structure du formulaire était assez compliquée. – ACIDSTEALTH
Je suis content que cela vous a aidé :) –