这是我的表格,显示了admin尚未审查的所有feedbacks
:
我在每个feedback
旁边有2个无线电按钮,可以选择接受或拒绝值1
或2
。
<% 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_tag
,1
或2
feedback
的review_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是名称,因此您不必在选项中传递它。