gpt4 book ai didi

ruby-on-rails - 在has_many关联上是否存在 “first_or_build”方法?

转载 作者:行者123 更新时间:2023-12-03 08:49:46 27 4
gpt4 key购买 nike

在Rails 3.2+中,您可以执行以下操作:

SomeModel.some_scope.first_or_initialize

这意味着您也可以:
OtherModel.some_models.first_or_initialize

我觉得这很有用,但我想在 first_or_build关联上使用 has_many方法,该方法的作用类似于 first_or_initialize,但也可以在需要时像 build一样向关联添加新记录。

更新以澄清:是的,我知道 first_or_initializefirst_or_create。事实是, first_or_initialize不会像 build那样将初始化的记录添加到关联的目标中,而 first_or_create ...很好...创建了一条记录,这并不是故意的。

我有一个使用关联扩展名的解决方案:
class OtherModel < ActiveRecord::Base

has_many :some_models do
def first_or_build( attributes = {}, options = {}, &block )
object = first_or_initialize( attributes, options, &block )
proxy_association.add_to_target( object ) if object.new_record?
object
end
end

end

我只是想知道是否:
  • 这个问题的内置解决方案已经存在?
  • 我的实现存在缺陷,我看不到吗?
  • 最佳答案

    我不确定在rails中是否有任何功能可以完全满足您的要求,但是您可以使用比您目前使用的更简洁的扩展名来模仿first_or_initialize代码,我相信它可以满足您的要求并将其包装到可重用的扩展,例如以下内容。这是用Rails 3.2扩展格式编写的。

    module FirstOrBuild
    def first_or_build(attributes = nil, options = {}, &block)
    first || build(attributes, options, &block)
    end
    end

    class OtherModel < ActiveRecord::Base
    has_many :some_models, :extend => FirstOrBuild
    end

    关于ruby-on-rails - 在has_many关联上是否存在 “first_or_build”方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16771746/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com