2011-09-06 192 views
4

假设我有一个获得展示/交易对象@Transaction/ID红宝石使用按钮

def show 
    @transaction = Transaction.find(params[:id]); 
end 

在show.html.erb,我想有一个按钮,按下时改变了一个轨道编辑属性交易的属性。我怎么做?

在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" /> 

当我点击该按钮时,在控制器中的“更新”方法被调用。如何将按钮中的值传递给更新方法中的特定操作?例如,假设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 

回答

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

我觉得'link_to'会是一个更好,更优雅的方式来写这个..? –

+0

它可能是,但它也看起来更多的工作。 –

+0

这不是那么多的工作 - 在我的答案中看到我的博客文章的链接; Rails使得这些超级简单的东西成为可能。 –

1

或者通过Ajax来完成。例如,你可以有link_to "Delete votes", delete_votes_path(user), :remote => true(或其他)。然后,该操作可以执行任何需要的操作,并且可能会返回将更新div/span /任何新值的JavaScript,并显示消息等等。

这有点优雅,Rails使创建一点点Ajaxy功能非常容易,可以提升用户体验,但不费吹灰之力。琐碎,天真的例子here