使用Rails模型更新以根据另一个更改一个布尔值

时间:2013-09-21 19:03:32

标签: ruby-on-rails ruby ruby-on-rails-3

我正在尝试制作宠物护栏应用。我的宠物模型包括两个布尔值,饥饿和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哈希,所以我很困惑为什么我不能用它来重置值。

1 个答案:

答案 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