form_for调用没有提交的模型方法

时间:2012-06-09 21:28:30

标签: ruby-on-rails ruby-on-rails-3

我有一个项目管理部分的索引页

<% @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:rejectReview模型中的公共实例方法。 出于某种原因,当我加载此索引页面时,它会自动调用review.reject方法,该方法将相应的is_rejected字段设置为true。如果我使用form_for位移除:approve,则form_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 %>

1 个答案:

答案 0 :(得分:1)

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