我正在尝试制作宠物护栏应用。我的宠物模型包括两个布尔值,饥饿和feed_me。现在,饥饿和feed_me都可以在视图中设置,但我正在尝试设置模型,这样如果feed_me为true,饥饿将自动更改为false。然而,无论我做什么,feed_me永远不会重置饥饿。这就是我现在在模型中的内容:
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哈希,所以我很困惑为什么我不能用它来重置值。
答案 0 :(得分:2)
使用模型回调你是在正确的轨道上,但是模型无法访问param
哈希 - 它可供控制器使用。
模型已经知道它自己的属性的值,所以你不需要从params获取它们。我想象的控制器正在更新feed_me
。
此外,您不需要将feed_me
声明为attr_accessor
,假设它由数据库列支持。
您可以将before_save
更改为:
def feed
if self.feed_me
self.hungry = false
end
end
在你的控制器中,我想你会做类似的事情:
def update
pet = Pet.find(params[:id])
pet.feed_me = params[:feed_me]
if pet.save
redirect_to pet_path(pet)
else
flash[:notice] = 'Error saving pet'
render :edit
end
end