2011-09-19 57 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

相关问题