我在form_for中有一个range_field,我不知道如何正确地将控制器和数据库所需的值传递给它。
似乎没有关于我能找到的range_field的信息。 This是我能找到的唯一类似的问题。
range_field(object_name,method,options = {})public
我希望单击“下一步”时将:value, :food_id, :user_id, :vas_question_id
保存在新的vas_answer中。我是否需要利用hidden_field来执行此操作?
每页可能有1-3个问题。 将它保存为数组还是作为3个单独的答案会更好/更容易吗?
从我目前的观点中删除相关代码:
<%= form_for @answer do |answer| %>
<% @foods.each do |food| %> # there could be 1, 2, or 3 foods
<h4 class="col-md-offset-1 col-md-10" style="font-size: 16px; line-height: 1.6em; clear: both;"><%= @question.prompt_left %> <strong><%= food.name %></strong> <%= @question.prompt_right %></h4>
<%= range_field :vas_answers, :value, min: 1, max: 500, step: 1, class: 'not-clicked', :food_id => food.id, :user_id => current_user.id, :vas_question_id => @question.order %>
# I saw :user_id => user.id on another question so I tried it, but I don't know what it is really doing
<% end %>
<%= answer.submit 'Next', :class => 'col-md-offset-9 btn btn-primary btn-surv' %>
<% end %>
控制器:
class VasAnswersController < ApplicationController
before_filter :authenticate_user!
def create
@answer = VasAnswer.new(answer_params[:vas_answers])
@q_num = params[:order] # determine order of questions (not really relevant)
@q_num = @q_num.to_i + 1
respond_to do |format|
if @answer.save
if @q_num < 25
format.html { redirect_to vas_questions_url(@q_num) }
else
format.html { redirect_to demographics_path}
end
end
end
end
private
def answer_params
params.require(:vas_answers).permit(:value, :user_id, :vas_question_id, :food_id)
end
end
路线:
post "vas_questions/:order" => "vas_answers#create", as: :vas_answers
答案 0 :(得分:2)
我认为你的方法可能有点困惑。我建议或许使用涉及表单和嵌套表单的不同方法,而不是遍历每一行并解释失败。查看关于主题的Rails Cast:
http://railscasts.com/episodes/196-nested-model-form-part-1
这是一个较旧的主题,但它应该可以帮助您将表单结构理顺一些。他有一个关于这个主题的最新演员,但你必须成为会员才能看到它:
http://railscasts.com/episodes/196-nested-model-form-revised
我会说用这种模式重组你的表格,然后再回答另一组问题。从最简单的结构形式开始,使其工作,然后增加复杂性。
希望有所帮助。
更新:我在Reddit上看到了你的帖子。你似乎是奇科州学生的事实可能会阻止人们“做你的功课”。我尝试以一种让你学习Rails方式的方式回答,而不是为你解决问题。