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