【问题标题】:How to find a record that wasn't saved yet in Rails?如何在 Rails 中找到尚未保存的记录?
【发布时间】:2011-09-05 08:10:18
【问题描述】:

假设我有一个名为 Post 的记录,其中包含许多 cmets。 现在我运行以下代码:

p = Post.new
p.comments.build(:title => 'great')

我现在想通过标题找到该评论。 如果记录被保存,我可以做类似的事情

p.comments.find_by_title('great')

但是由于它还没有保存,所以它会返回 nil(因为它实际上运行了一个 SQL 查询) 有没有办法在保存之前找到该记录?

谢谢!

【问题讨论】:

    标签: sql ruby-on-rails database ruby-on-rails-3 arel


    【解决方案1】:
    comment = p.comments.build(:title => "great")
    

    【讨论】:

    • 您实际上是对的,但我想稍后获取它,而不必为其设置变量(我在保存记录之前从另一个地方读取它)。我应该指定的。
    • 在这种情况下,您只是想使用不同类型的变量存储。根据您的情况尝试session[:comment]@comment@@comment(注意最后一个)。
    【解决方案2】:
    great_comment = p.comments.detect{|c| c.title == 'great'}
    

    【讨论】:

      【解决方案3】:

      只写:

      new_comment = p.comments.build(:title => 'great')
      

      new_comment 将是新添加的评论。

      或者,您可以执行以下操作:

      new_comments = p.comments.select{|x| x.new_record?}
      

      这将为您提供一个包含所有未保存 cmets 的数组。

      【讨论】:

      • 你的第二个解决方案接近我想要的,但我正在寻找一个特定的记录。我想我可以做到p.comments.select{|x| x.new_record? && x.title == 'great' },但这不是浪费资源吗?
      • 您只是在内存中迭代comments。我还假设在给定的时刻,只有一条记录是新的、未保存的记录。但如果不是这样,确实添加了额外的条件。实际上,理想情况下,您会将新评论保存在一个变量中,您可以直接访问它。
      猜你喜欢
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2013-09-27
      相关资源
      最近更新 更多