我有一个项目管理部分的索引页
<% @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_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 %>
答案 0 :(得分:1)
表单构建器正在调用批准并拒绝您的模型,因为它正在尝试确定将隐藏字段的值设置为的内容。解决这个问题的一种方法是不使用f.hidden_field
,只创建一个与模型无关的隐藏字段。您可以改为使用hidden_field_tag
。