3

这是我的表单,其中显示feedbacks了管理员尚未审核的所有内容:

我每个旁边有 2 个单选按钮,feedback用于选择接受或拒绝值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更新review_option每个选定的字段,或者feedbackradio_button_tag12

我现在有你看到的表格,效果很好,但我被困在控制器部分:

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

如何将这些单选按钮中的参数传递给控制器​​。谢谢你。

ps 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"}
4

2 回答 2

2

好的,所以这是答案:

feedback.rb

   class Status
     ACCEPTED = 1
     REJECTED = 2
   end

形式:_

<% 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 -%>

feedbacks_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
于 2012-10-16T14:07:56.877 回答
1

当我不确定如何在参数中传递数据时,我喜欢做的是在控制器中引发异常。开发异常处理程序输出有关参数内容的非常好的信息。我什至可以为我的异常添加一个 .inspect 并查看详细信息。

def update
  raise "some string"
end

或者

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

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

于 2012-10-16T12:34:01.023 回答