使用link_to切换布尔值
我已经阅读了相关的Stack问题,但似乎仍然遇到了以下代码的路由错误:
的routes.rb
resources :memberships do put :toggleon put :toggleoff end
Memberships_controller.rb
def toggleon @membership = Membership.find(params[:id]) @membership.update_attributes(:active => true) if user.id == membership_id redirect_to root_path else redirect_to group end end def toggleoff @membership = Membership.find(params[:id]) @membership.update_attributes(:active => false) if user.id == membership_id redirect_to root_path else redirect_to group end end
Show.html.erb
错误文字
Started POST "/memberships/13" for 127.0.0.1 at 2011-09-27 23:35:35 +0100 ActionController::RoutingError (No route matches "/memberships/13"):
我可以摧毁会员资格,但切换成员资格活动certificate是棘手的。
提前致谢!
第二次尝试
:put, :title => "This toggles it off") %> :put, :title => "This toggles it on") %>
和
def toggle @membership = Membership.find(params[:id]) @membership.toggle!(active) end
和
resources :memberships do member do put :toggle end end
现在给我这个错误……
undefined method `membership_toggle' for #<#:0x00000102e66ec0>
使用您的路线的链接将是:
link_to("Toggle On", membership_toggleon_url(membership), :method => :put, :title => "This toggles it on") link_to("Toggle Off", membership_toggleoff_url(membership), :method => :put, :title => "This toggles it off")
你需要提供:method => :put
给link_to方法,因为你的路由文件中有你的路由。
这样的事情可以通过一个动作实现:
resources :memberships do member do put :toggle end end
然后,您可以使用Rails 切换方法在控制器中使用单个布尔字段。
这将让你做类似的事情:
@membership.toggle(:on)
尝试将路由设置为:on => :member
。
还有一个primefacestoggle!
做其名称所暗示的方法。
保持各种技术的问题,但最终发现这篇文章:
http://buckybits.blogspot.com/2011/09/simple-ajax-property-toggle-in-rails-30.html
繁荣!