假设我有一个显示/ transactions / id
的对象@transactiondef show
@transaction = Transaction.find(params[:id]);
end
在show.html.erb中,我希望有一个按钮,按下时会更改Transaction的一个属性。我该怎么做?
在show.html.erb中,我有
<%= form_for @transaction do |t| %>
<%= t.label :id %> : <%= @transaction.id %><br />
<%= t.submit "pay" %>
<% end %>
编辑:我想我可能误导了这个问题。上面的按钮代码生成了这个html:
<input id="transaction_submit" name="commit" type="submit" value="pay" />
单击按钮时,将调用控制器中的“update”方法。如何将值从按钮传递到更新方法中的特定操作?例如,假设button1
将transaction.name更改为“lalala”。我该怎么做?
def update
// if button1 is pressed, change transaction.name to lalala
// if button2 is pressed, change transaction.amount to bobobo
end
答案 0 :(得分:4)
为每个按钮使用不同的表单:
<%= form_for @transaction do |t| %>
<%= t.hidden_field :name, :value=>"mike">
<%= t.submit "change_name_to_mike" %>
<% end %>
<%= form_for @transaction do |t| %>
<%= t.hidden_field :name, :value=>"john"%>
<%= t.submit "change_name_to_john`" %>
<% end %>
希望得到这个帮助。
答案 1 :(得分:1)
或者通过Ajax来做。例如,您可以拥有link_to "Delete votes", delete_votes_path(user), :remote => true
(或其他)。然后,操作可以执行它需要的任何操作,并且可能返回将使用新值更新div / span / whatever的JavaScript,以及显示消息等等。
这更优雅一点,Rails使得创建一点点Ajaxy功能变得非常容易,从而增加了用户体验,但却不费吹灰之力。琐碎,天真的例子here。