如何将params从radio_button_tags传递到控制器



这是我的表格,显示了admin尚未审查的所有feedbacks

我在每个feedback旁边有2个无线电按钮,可以选择接受或拒绝值12

<% form_tag moderate_feedbacks_path, :method => :put do %>
  <table>
    <% @all_feedbacks.each do |feedback| %>
    <tr>
      <td><%= radio_button_tag :review_option, '1', false, :name => feedback.id %></td>
      <td><%= radio_button_tag :review_option, '2', false, :name => feedback.id %></td>
      <td><%= feedback.name %></td>
      <td><%= feedback.email %></td>
      <td><%= feedback.message %></td>
    </tr>
    <% end %>
   </table>
<%= submit_tag 'Apply' %>
<% end -%>

我要做的是单击submit_tag时,以使用radio_button_tag12

的值更新每个选定的feedbackreview_option字段

我现在已经看到了您所看到的表格,效果很好,但是我被困在控制器部分:

def moderate_feedbacks
  Feedback.update_all(["review_option = ?", ????])
  redirect_to admin_feedbacks_path
end

如何将参数从这些无线电按钮传递给控制器。谢谢。

p.s。 html来源:

<input id="review_option_1" name="3" type="radio" value="1">
<input id="review_option_2" name="3" type="radio" value="2">

名称取自feedback.id

按下submit_tag看起来像这样的登录;

Processing Admin::FeedbacksController#moderate_feedbacks (for 127.0.0.1 at 2012-10-16 15:36:20) [PUT]
  Parameters: {"commit"=>"Apply", "3"=>"2", "4"=>"1"}

其中3是反馈的ID -2无线电值4是反馈的ID -1无线电值

raise.params["feedback.is"].inspect

之后
Parameters:
    {"commit"=>"Apply",
     "3"=>"1",
     "4"=>"1",
     "_method"=>"put"}

好,所以这是答案:

feathback.rb

   class Status
     ACCEPTED = 1
     REJECTED = 2
   end

form 中:

<% form_tag moderate_feedbacks_path, :method => :put do %>
  <table>
    <% @all_feedbacks.each do |feedback| %>
    <tr>
      <td><%= radio_button_tag :review_option, Feedback::Status::ACCEPTED, false, :name => feedback.id %></td>
      <td><%= radio_button_tag :review_option, Feedback::Status::REJECTED, false, :name => feedback.id %></td>
      <td><%= feedback.name %></td>
      <td><%= feedback.email %></td>
      <td><%= feedback.message %></td>
    </tr>
    <% end %>
   </table>
<%= submit_tag 'Apply' %>
<% end -%>

feathbacks_controller.rb

   def moderate_feedbacks
    params.each do |key, value|
      if key =~ /^r(d+)/ && !value.blank?
        feedback_id = $1
        Feedback.update_all(["review_option = ?", value.to_i], ["id = ?", feedback_id])
      end
    end
    redirect_to admin_feedbacks_path
  end

当我不确定如何以参数传递数据时,我喜欢做的是在控制器中提出异常。开发异常处理程序输出了有关参数内容的非常好的信息。我什至可以对我的例外提出。

def update
  raise "some string"
end

def update
  raise params["feedback.id"].inspect
end

还请注意,第一个参数是Radio_Button_TAG是名称,因此您不必在选项中传递它。

最新更新