2011-09-06 110 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