在Rails 3中如何使用button_to来更改布尔值?

时间:2011-08-19 16:45:53

标签: ruby-on-rails

我正在尝试编写一个button_to语句,用于更新activerecord数据库中的布尔值。这是我试过的:

<%= button_to "To Amazon", :controller => 'payments', :true => @payment.to_amazon, :method => :put %>

更大的图片我想要做的是有一个更新付款对象的按钮,并触发私人方法的调用,以便宝石汇款与亚马逊付款进行通信。所以:

1)如何使用button_to更新布尔值?

2)更改布尔值是否是访问控制器中私有方法的好方法?

1 个答案:

答案 0 :(得分:4)

你能做的就是使用AJAX对你的控制器进行回调以切换该布尔值。在这种情况下,我可能只是使用链接或复选框,但最终不是一个大问题。如果您需要一些代码来说明如何执行此操作,请告诉我。

有一个similar question关于指定我回答的操作,我在那里使用了link_to:

link_to "Profile", :controller => "profiles", :action => "show", :method => :get, :id => @profile

所以你可以指定动作,但这只适用于链接而不是按钮。但你可以做一些特殊的动作来完成更新。

至于你的第二个问题,如果我理解正确,你想在@payment对象上设置一个布尔值然后调用私有方法?我假设你也将boolean存储在数据库中。因此,您的控制器操作可以执行以下操作:

@payment.call_amazon_payment_method

然后在payment.rb中(假设您的布尔列只是因为缺少更好的假名而被称为“boolean_col”):

def call_amazon_payment_method
    new_val = self.boolean_col? false : true
    self.update_attributes(:boolean_col => new_val)
    # if that alone will trigger your private method, you're done, or:
    self.private_amazon_payment_method
end

我希望我能够正确理解你的问题并帮助你找到一个优雅的解决方案。