2011-08-19 66 views
3

我想写一个button_to语句来更新我的activerecord数据库中的布尔值。下面是我的尝试:在Rails 3中,我如何使用button_to来更改布尔值的值?

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

大局观什么,我试图做的是有一个按钮,更新的支付对象和触发器的宝石职权范围与亚马逊支付通信的私有方法的调用。所以:

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

2)是否正在改变一个布尔型访问控制器中私有方法的好方法?

回答

4

那么你可以做的是使用AJAX来回拨你的控制器来切换布尔值。在这种情况下,我可能只是使用链接或复选框,但最终不是一个大问题。如果你想要一些代码来说明如何做到这一点,请告诉我。

有一个similar question如何指定我回答的行动,我用的link_to有这样的:

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

所以,你可以指定动作,但只有一个链接,而不是一个按钮的工作原理。但是你可以做一些更新的特殊行动。

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

@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 

我希望我能正确理解你的问题,并帮助你迈向一个优雅的解决方案。