text_field tag simple_fields_for simple select_tag rails form example html forms ruby-on-rails-4 simple-form formtastic

html - tag - Rails4: Formtastic3.0, guarde varias instancias(para los modelos de Answer) al mismo tiempo



simple_fields_for (1)

En lugar de crear un formulario para @questions , debe pasar un solo objeto a su asistente de formulario ( @questions es una matriz de preguntas). Una buena manera de lograr esto es a través de un objeto de forma .

# app/forms/questions_form.rb class QuestionsForm include ActiveModel::Model def initialize(user) @user = user end def questions @questions ||= Question.all end def submit(params) params.questions.each_pair do |question_id, answer| answer = Answer.find_or_initialize_by(question_id: question_id, user: current_user) answer.content = answer answer.save end end def answer_for(question) answer = answers.select { |answer| answer.question_id == question.id } answer.try(:content) end def answers @answers ||= @user.answers.where(question: questions) end end

Luego, en su controlador tendría:

# app/controllers/submissions_controller.rb Class SubmissionsController < ApplicationController ... def new @questions_form = QuestionsForm.new(current_user) end def create @questions_form = QuestionsForm.new(current_user) @questions_form.submit(params[:questions_form]) redirect_to # where-ever end ... end

En su opinión, querrá algo como:

# app/views/submissions/new.html.haml = form_for @questions_form, url: submissions_path do |f| - @questions_form.questions.each do |question| %p= question.content = f.text_field "questions[#{question.id}]", value: @questions_form.answer_for(question) = f.submit "Submit"

Esto no usa formtastic en absoluto, solo usa los rieles simples como ayudantes.

Este código no se ha probado, por lo que no estoy seguro si funciona, pero espero que te ayude a seguir el camino correcto.

Tengo modelo de pregunta y un modelo de respuesta.

Cada pregunta puede tener una respuesta por usuario. Estoy tratando de predefinir a un usuario un formulario para responder a todas las preguntas, pero realmente no pude entender cómo hacerlo con formtastic

Esto es lo que tengo hasta ahora

- @questions.each do |q| = q.content - ans = @user.answers.where(question_id:q.id).first.try(:content) || q.description = semantic_form_for @answers do |f| = f.label q.content = f.inputs :content, placeholder: ans = f.actions

Estoy tratando de obtener alguna pista de Cómo pasar a través de dos recursos alternativos en un formulario. pero sigo obteniendo el "método no definido` model_name ''para Class: Class "para @questions si intento:

= semantic_form_for @questions do |q| = q.input :content = q.semantic_fields_for @answer do |a| = a.inputs :content = q.actions

Basado en Railscast 198, pero el uso de formtastic aquí es mi intento que tampoco funciona:

- semantic_form_for :Answer, :url => api_v1_answers_path, :method => :put do |f| - @questions.each do |q| - f.fields_for ''questions[]'', q do |ff| = q.content = ff.input = submit_tag "Submit"

Nota:

1] Me gustaría que el usuario presione enviar solo una vez después de haber agregado / editado todas las respuestas

2] Si hay una respuesta ya presente, debe ser pre-pulada en el cuadro de texto

3] No me importa usar la gema simple_form si eso hace la vida más fácil