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

where:approve:rejectReview模型中的公共实例方法。由于某种原因,当我加载此索引页面时,它会自动调用review.reject将相应is_rejected字段设置为true. 如果我用位删除,同样的行为也适用于form_forwith 。:approveform_for:reject

index来自相应控制器的动作非常简单

def index
  @reviews = Review.all
end

我意识到这一定是正常行为,但我希望reject只有在提交相应表单时才调用方法。有没有办法解决它?谢谢你。

更新 仅供将来参考(包括我自己的):使用button_tohelper 来做这样的事情更容易

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

表单构建器在您的模型上调用批准和拒绝,因为它试图确定将隐藏字段的值设置为什么。解决此问题的一种方法是不使用f.hidden_field并仅创建一个与您的模型无关的隐藏字段。你可以hidden_field_tag改用。

于 2012-06-09T21:51:05.767 回答