"G", :email =>-6ren">
gpt4 book ai didi

ruby-on-rails - 将 Add 方法添加到 ActiveRecord 数组

转载 作者:数据小太阳 更新时间:2023-10-29 07:18:40 24 4
gpt4 key购买 nike

我有模型类别和产品。如果我使用 category.products << new_product该项目被添加到数组中,记录被保存到数据库中。我尝试将以下“添加”方法添加到数组类中,虽然它确实将 new_product 添加到数组中,但不会将其保存到数据库中。这是为什么?

class Array
def add(item)
self << item
end
end

更新:

collection_proxy.rb 有以下方法:

def <<(*records)
proxy_association.concat(records) && self
end
alias_method :push, :<<

所以下面的扩展有效:

class ActiveRecord::Relation
def add(*records)
proxy_association.concat(records) && self
end
end

解决方案:

为 CollectionProxy 添加一个别名:

class ActiveRecord::Associations::CollectionProxy
alias_method :add, :<<
end

最佳答案

编辑: Manuel 找到了更好的解决方案

class ActiveRecord::Associations::CollectionProxy
alias_method :add, :<<
end

原方案:

这应该可以帮助您入门。它并不完美。

class ActiveRecord::Relation
def add(attrs)
create attrs
end
end

我没有使用您的模型名称启动一个新的 Rails 项目,我只是使用了一个用于以下示例的项目:

1.9.3p194 :006 > Artist.create(:first_name => "Kyle", :last_name => "G", :email => "foo@bar.com")
=> #<Artist id: 5, first_name: "Kyle", last_name: "G", nickname: nil, email: "foo@bar.com", created_at: "2012-08-16 04:08:30", updated_at: "2012-08-16 04:08:30", profile_image_id: nil, active: true, bio: nil>
1.9.3p194 :007 > Artist.first.posts.count
=> 0
1.9.3p194 :008 > Artist.first.posts.add :title => "Foo", :body => "Bar"
=> #<Post id: 12, title: "Foo", body: "Bar", artist_id: 5, created_at: "2012-08-16 04:08:48", updated_at: "2012-08-16 04:08:48">
1.9.3p194 :009 > Artist.first.posts.count
=> 1

关于ruby-on-rails - 将 Add 方法添加到 ActiveRecord 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11977701/

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