我试图制作一个宠物栏应用程序。我的宠物模型包含两个布尔值饥饿和feed_me。现在,饥饿和feed_me都可以在视图中设置,但我试图设置模型,以便如果feed_me为true,饥饿会自动更改为false。然而,无论我做什么,feed_me都不会重置饥饿。这是我在现在的模式:使用Rails模型更新以基于另一个更改一个布尔值
attr_accessor :feed_me
before_save :feed
def feed
@feed_me = Creature.find(params[:feed_me])
@hungry=Creature.find(params[:hungry])
if @feed_me==true
@hungry=false
end
end
我是新来的Rails,但我的理解是,模型应该有机会获得params哈希表,所以我很困惑,为什么我不能用它重置值。
你所需要的:feed_me列?您可以通过只有一个:饥饿的布尔列来简化您的Creature模型。例如,如果feed_me只是在一个生物已经饥饿5小时后才会发生,那么您可以即时计算,而不是存储在数据库中。 – danneu
你知道吗,我不认为我真的需要它 - 我想让用户有能力在饥饿的时候喂养宠物,并使它不饿。这是我应该用辅助函数做的事吗? – USK
你甚至可以只有'last_fed_at'列(日期时间)。这样你就可以拥有一个像这样实现的'@ creature.hungry?'方法:'last_fed_at> 5.hours.ago'(生物只有在5小时内没有喂食的时候才会饿)。那么你可以有一些逻辑:if @ creature.hungry?然后显示FEED ME按钮。 FEED ME按钮只是调用'@ creature.feed'方法,它会执行'@ creature.update_column(:last_fed_at,Time.now)'。现在@ creature.hungry?由于其last_fed_at已更新至现在,因此为false。那有意义吗? – danneu