2011-09-19 31 views
0

我希望用戶點擊一個鏈接,它將修改一個ActiveRecord條目。該記錄被稱爲feed.disabled,該鏈接將在truefalse之間切換該記錄。我做了一個幫助方法來確定鏈接的文本:如何在Rails應用程序中創建按鈕以讓用戶修改ActiveRecord?

def disable_button(feed) 
    if feed.disabled? 
    return 'Enable Feed' 
    else 
    return 'Disable Feed' 
    end 
end 

所以我的問題真的是雙重的。該幫手是否能夠在視圖中顯示正確的文本,以及如何獲取該鏈接,以根據當前狀態將feed.disabled記錄修改爲truefalse

feeds_controller.rb

def toggle_disabled_record 
    @feed = Project.find(params[:project_id]).feeds.find(params[:id]) 
    @feed.toggle!(:disabled) 
    render :nothing => true 
end 

projects->show.html.erb

<%= link_to toggle_disable_button(feed), toggle_disabled_record_project_feed_path(feed) %> 

routes.rb

resources :projects do 
    resources :feeds 
end 

resources :feeds do 
    resources :xml_fields 
    get toggle_disabled_record, :on => :member 
end 

回答

2

看看(我的)this blog post;這是一個鏈接,而不是一個按鈕,但或多或​​少地直接解決這個問題。

+0

我幾乎逐字記錄了你的文章,但我一直在收到一個路由未定義的方法錯誤。我從來沒有真正理解路由如何工作,但我安排我的記錄的方式是Project has_many Feeds。我粘貼了上面添加的方法。 – Paul

+0

爲什麼不使用'toggle!'?我不知道你的路線是什麼,或者你嘗試使用什麼鏈接,所以這很難幫助:) –

+0

對不起,我發佈更新的方法緩慢 - 現在檢查它們。 – Paul

1

編輯基於戴夫指南添加方法該幫助程序將工作,但它的名稱給出它將返回實際按鈕元素的想法。

你很可能產生這樣的使用button_to與助手看起來像這樣一個按鈕:

def toggle_disable_button(feed) 
    button_text = feed.disabled? ? 'Enable feed' : 'Disable feed' 

    button_to(button_text, toggle_feed_disabled_path(feed)) 
end 

這當然取決於你有一個匹配的控制器動作和路線。 您可能還可以這樣創建一個按鈕:

button_tag(button_text, :name => 'feed[disabled]', :value => !feed.disabled?) 

,但這可能無法在所有的瀏覽器。

+0

我在標題中出現了一個錯誤,並且打算將'link'替換爲'button'。我假設我可以在你建議'button_to'的地方將'link_to'分支出來。至於控制器操作,我實際上只是寫了另一個輔助方法(我在上面添加)。 – Paul

+0

你可以使用'link_to',但這樣你真的想給它一個':method =>:put'(或':post')。這裏的link_to的文檔和例子(例如)在這裏:http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to – Frost

+0

雖然我現在意識到,第二個助手不會與你的建議一起工作。 – Paul

相關問題