0

プロジェクトの管理者部分のインデックスページがあります

<% @reviews.each do |review| %>
  <p><%= review.header %></p>
  <p><%= review.body %></p>
  <%= form_for [:admin, review] do |f| %>
    <%= f.hidden_field :approve %>
    <%= f.submit "Approve" %>
  <% end %>
  <%= form_for [:admin, review] do |f| %>
    <%= f.hidden_field :reject %>
    <%= f.submit "Reject" %>
  <% end %>
<% end %>

ここで:approve、および:rejectはモデルのパブリックインスタンスメソッドReviewです。何らかの理由で、このインデックスページをロードすると、対応するフィールドをにreview.reject設定するメソッドが自動的に呼び出されます。ビットで削除した場合も同じ動作がに適用されます。is_rejectedtrueform_for:approveform_for:reject

index対応するコントローラーからのアクションは非常に簡単です

def index
  @reviews = Review.all
end

rejectこれは正常な動作である必要があることは理解していますが、対応するフォームを送信するときにのみメソッドを呼び出すことを期待しています。それを修正する方法はありますか?ありがとうございました。

更新 将来の参照(私自身を含む)のためだけに:そのbutton_toようなもののためにヘルパーを使用する方が簡単です

<%= button_to "Approve", { :action => "update", :id => review.id, :review => { :approve => true } }, :method => :put %>
<%= button_to "Reject", { :action => "update", :id => review.id, :review => { :reject => true } }, :method => :put %>
4

1 に答える 1

1

フォームビルダーは、非表示フィールドの値を何に設定するかを決定しようとしているため、モデルに対して承認と拒否を呼び出しています。これを回避する1つの方法はf.hidden_field、モデルに関連付けられていない非表示のフィールドを使用せずに作成することです。代わりに使用できますhidden_field_tag

于 2012-06-09T21:51:05.767 に答える