我希望用户能够在答案模型中回答分配给他们的所有问题。现在我正在尝试创建一个表单,允许我遍历用户分配给他们的问题,并在答案模型中回答它们。
在答案模型中,我保存了回复和问题ID。然而,这需要在一种形式中进行多次保存,这是我无法做到的。
模型关联看起来像这样:
用户
has_many :answers
has_many :questions, through: :question_participants
答案
belongs_to :user
belongs_to :question
现在我正在尝试创建一个像这样的Answer#new form:
<%= form_for @answer do |f| %>
<% @questions.each do |question| %>
<h3><%= question.name %></h3>
<%= f.hidden_field :question_id, value: question.id %>
<%= f.text_field :reply, class: 'form-control' %>
<% end %>
<%= f.submit 'Send inn', class: 'btn btn-success' %>
<% end %>
因此希望它允许我将多个列保存在一个中,但这不起作用。无论如何,它只保存最后一列。
我的回答控制器:
class AnswersController < ApplicationController
def new
@questions = current_user.questions
@answer = current_user.answers.new
end
def create
@questions = current_user.questions
@answer = current_user.answers.new(answer_params)
if @answer.save
redirect_to answers_path
else
render 'new'
end
end
private
def answer_params
params.require(:answer).permit(:reply, :question_id)
end
end
答案 0 :(得分:0)
您正在寻找的是 accepts_nested_attributes_for
:
这应该有效:
#config/routes.rb
resources :answers, only: [:edit, :update]
#app/controllers/answers_controller.rb
class AnswersController < ApplicationController
def edit
@questions = current_user.questions
end
def update
@answers = current_user.answers.update answer_params
end
private
def answer_params
params.require(:answer).permit(:response) #-> question_id and user_id set on create, don't need to be changed
end
end
这将使您能够执行以下操作:
#app/views/answers/edit.html.erb
<%= form_tag answers_update_path, method: :patch do |f| %>
<% @questions.each do |question| %>
<%= f.fields_for "answers[]", question do |qf| %>
<%= qf.label question.title %>
<%= qf.text_field :response %>
<% end %>
<% end %>
<%= f.submit %>
<% end %>
这将允许您使用以下表格:
accepts_nested_attributes_for
-
通常,您将current_user.questions
与嵌套模型一起使用。但是,由于您只需要多个答案回复,因此可以使用上述内容。
这个中的错误很可能是在强大的参数中,或者在形式声明中(IE <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<fragment
android:id="@+id/navigation_drawer"
android:name="com.lia.sonorMap.NavigationDrawerFragment"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
tools:layout="@layout/fragment_navigation_drawer" />
<Button
android:id="@id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:layout_alignParentBottom="true"/>
</android.support.v4.widget.DrawerLayout>
)。如果你回复信息,我会写一些upates