Ruby on rails 3 在rails用户模型中调用ActiveRecord::Create(),而不将新对象与用户关联

Ruby on rails 3 在rails用户模型中调用ActiveRecord::Create(),而不将新对象与用户关联,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,在我的rails用户模型中,我试图编写一个方法,返回当前时间范围的列表,如果没有该时间范围的列表,则创建一个与用户关联的列表,然后返回它: class User < ActiveRecord::Base def todaysList today = Time.new if self.lists.where(:date => today.to_date) return self.lists.where(:date => today.to_date).fi

在我的rails用户模型中,我试图编写一个方法,返回当前时间范围的列表,如果没有该时间范围的列表,则创建一个与用户关联的列表,然后返回它:

class User < ActiveRecord::Base

def todaysList
   today = Time.new
   if self.lists.where(:date => today.to_date)
      return self.lists.where(:date => today.to_date).first #Get the object, not the ActiveRecord::Relation
   else
      self.lists.create!(:date => today.to_date) #Make the list, return it!
   end
end
然而,这个解决方案似乎并不正确


提前感谢,并一如既往地为愚蠢、多余或措词不当的问题道歉。

我会这样做:

def todays_list
  lists.find_or_create_by_date(Date.today)
end

方法名称更改只是首选项。

您显示的代码应该是在它创建的列表上设置
用户id
。你看到什么让你认为它不是?我可以通过查看rails控制台中的结果对象来判断它没有填充。列表有一个索引视图,显示当前列表,每次调用该视图时,它都会调用用户模型中的todaysList方法,找不到与满足要求的当前用户关联的列表,然后创建一个新的列表。因此,每次刷新列表索引视图时,当前列表的ID都会增加。奇怪,很酷。显然,这要干净得多。从用户模型中将其称为“self.lists.find”或“create\u by\u foo”(“bar”)仍然不会填充用户关联,但可以通过在对查找器的调用中指定:creator轻松完成。我仍然对找出self.create不填充用户关联的原因非常感兴趣。我相信这是有原因的,尽管这对我来说并不直观。
def todays_list
  lists.find_or_create_by_date(Date.today)
end