使用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

繁荣!