0

我正在尝试制作一个宠物栏杆应用程序。我的宠物模型包含两个布尔值,饥饿和 feed_me。现在,可以在视图中设置饥饿和 feed_me,但我正在尝试设置模型,以便如果 feed_me 为真,饥饿将自动更改为假。然而,无论我做什么,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 哈希,所以我很困惑为什么我不能用它来重置值。

4

1 回答 1

2

您使用模型回调走在正确的轨道上,但是模型无权访问param散列 - 它可供控制器使用。

模型已经知道它自己的属性的值,所以你不需要从参数中获取它们。我想象的控制器正在更新feed_me

此外,您不需要声明feed_meattr_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
于 2013-09-21T19:14:46.213 回答