2016-11-11 72 views
1

我可以使用它,但我确定在Rails的Show动作中使用update_attribute动作是一种好的做法。如果它是一个不好的做法,请建议最好的替代方案,因为我需要更新每个节目行动的一列。在Rails中使用update_attribute动作最好的做法是显示

我的代码

def show 
     @package = Package.friendly.find(params[:id]) 
     @pack = Package.where(:category_id => @package.category_id).sample(4) 
     @setting = Setting.find(1) 
     counter = @package.counter 
     count = counter+1 
     @package.update_attributes(:counter => count) 
    end 
+0

很好,表演动作(“REA d“在CRUD中)不应该改变数据。但你必须这样做,你必须这样做。 –

+0

是的,它不应该改变数据,但是我们可以写一些动作。谢谢,我会执行它 –

回答

1

在Rails CRUD公约 “秀” 应该从一个HTTP GET路线。通常,最好避免修改GET操作中的任何数据库状态。因此,要回答您的问题,不,在演出活动中使用update_attribute不是最佳做法。

+0

所以还有其他的最佳做法。我用程序代码更新了我的问题。请建议我最好的选择! –

0

这真是一个奇怪的处理,以便获得计数,然后由值增加它然后更新表

这使慢成

最佳实践可以实现这样的

item = Item.find(1) 
item.foo_count # => 0 
Item.increment_counter(:foo_count, 1) 
item.foo_count # => 0 
item.reload 
item.foo_count # => 1 
item.increment(:foo_count) 
item.foo_count # => 2 

按照您的逻辑的代码将

Package.increment_counter(:counter, 1) 
@package.increment(:counter) 
相关问题