在Rails 3控制器中,如何获取产生答案的单选按钮组的名称?

时间:2011-05-09 14:02:22

标签: jquery ruby-on-rails-3

我一直在研究这个问题超过3天。 := [

我正在尝试获取从jQuery传递的值。我的视图代码, application.js和controller如下。

视图:

<%= form_tag update_result_answers_path, :remote => true do %>
   <% @answers.each do |q| %>
      <%= q[0].question %>
      <% [ 1, 2, 3, 4, 5 ].each do |f| %>
         <%= radio_button_tag q[1].id, f, f == q[1].score, :class => 'submittable' %>
      <% end %>
   <% end %>
<% end %>

的application.js:

$('.submittable').live
    ('change', function() 
        {
        $(this).parents('form:first').submit();
        return false;
        }
    );

控制器:

  def update_result
    @answ = Answer.where(id = name)
    @answ.update_attributes params[:score]
  end

在运行rails服务器的控制台窗口中,单击单选按钮时会出现以下情况:

Parameters: {"authenticity_token"=>..., "155"=>"2"}

我将单选按钮设置为答案记录的id(参见视图中的q [1] .id)。因此单选按钮组的名称(也是答案记录的id)是“155”。答案是“2”。 Params [:id]不捕获id,所以我在控制器中更改为“@answ = Answer.where(id = name)”并得到以下错误:

"undefined local variable or method `name'"

如何更改控制器以获取单选按钮组的名称和值?

感谢。

1 个答案:

答案 0 :(得分:1)

我建议使用其他级别的嵌套 - 这样您就可以将Answers与其他表单参数分开。

HTML

<%= form_tag update_result_answers_path, :remote => true do %>
  <% @answers.each do |q| %>
    <%= q[0].question %>
    <% [ 1, 2, 3, 4, 5 ].each do |f| %>
  <% if f == q[1].score
    chk="checked='checked'"
  else
    chk=""
  end %>

      <input "<%= chk %>" class="submittable" name="answer[<%=q[1].id%>]" type="radio" value="<%= f %>" />
    <% end %>
  <% end %>
<% end %>

RUBY

def update_result
  params[:answer].each_pair do |key,value|
    @ans = Answer.find(key.to_i)
    @ans.update_attributes(:score => value)
  end
end

我对Rails视图助手并不熟悉,我的解决方案可能只有2.3-ish。