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_optionfeedbackradio_button_tag12

ご覧のとおり、フォームは正常に機能しますが、コントローラー部分で立ち往生しています。

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

これらのラジオ ボタンからコントローラーにパラメーターを渡す方法を教えてください。ありがとうございました。

pshtmlソース:

<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

データが params でどのように渡されるかわからない場合は、コントローラーで例外を発生させます。開発例外ハンドラは、params の内容に関する非常に優れた情報を出力します。例外に .inspect を入れて、詳細を確認することもできます。

def update
  raise "some string"
end

また

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

また、radio_button_tag の最初の引数は名前であるため、オプションで渡す必要がないことに注意してください。

于 2012-10-16T12:34:01.023 に答える