Ruby on rails 允许用户在一个表单中创建多个问题的答案

Ruby on rails 允许用户在一个表单中创建多个问题的答案,ruby-on-rails,Ruby On Rails,我有一个这样的模型关系: # User model class User < ActiveRecord::Base belongs_to :company has_many :answers # groups has_many :group_memberships has_many :group_questions, through: :groups, source: :questions has_many :groups, through: :group_memb

我有一个这样的模型关系:

# User model
class User < ActiveRecord::Base
  belongs_to :company
  has_many :answers
  # groups
  has_many :group_memberships
  has_many :group_questions, through: :groups, source: :questions
  has_many :groups, through: :group_memberships
  # question
  has_many :question_participants, as: :questionable
  has_many :questions, through: :question_participants
#用户模型
类用户

#管理员创建的问题
类问题

#用户问题解答
类答案
现在我的答案存储用户id、回复(他们的答案)和问题id。 我现在希望能够创建一个表单,允许用户回答向他们提出的所有问题,并提交答案

我在视图文件中设置了这样的表单(答案#新建):




这不起作用,我明白了原因——问题是我不知道如何使它在多次保存时起作用。

我希望我明白了您的问题所在。以下是我的建议:

<%= form_for @answer do |f| %>
  <% current_user.all_questions.each do |question| %>
    <%= hidden_field_tag 'questions[][id]', question.id %>
    <p><%= question.name %>
    <%= text_field_tag 'questions[][reply]' %>
  <% end %>
<% end %>

获取问题的未定义方法[][答复]。“你知道为什么吗?”塞巴斯蒂安杰宁萨尔姆内斯,它是在哪里长大的?在视图中?是的,问题[][回复]的文本字段似乎正在工作!你知道在它们全部保存后如何重定向吗?这取决于如果其中一些没有保存(无效),你将怎么做
# user answers to questions
class Answer < ActiveRecord::Base
  belongs_to :user
  belongs_to :question
end
<%= form_for @answer do |f| %>
  <% current_user.all_questions.each do |question| %>
    <%= f.hidden_field :question_id, value: question.id %>
    <p><%= question.name %>
    <%= f.text_field :reply %>
  <% end %>
<% end %>
<%= form_for @answer do |f| %>
  <% current_user.all_questions.each do |question| %>
    <%= hidden_field_tag 'questions[][id]', question.id %>
    <p><%= question.name %>
    <%= text_field_tag 'questions[][reply]' %>
  <% end %>
<% end %>
# your_controller.rb
def create_answers
  answers = params[:questions].map do |question|
    current_user.answers.create(question_id: question[:id], reply: question[:reply])
  end

  if answers.any(&:invalid?)
    flash[:error] = 'Some answers were not accepted'
    redirect_to :back
  else
    redirect_to home_path
  end
end