繁体   English   中英

将Add方法添加到ActiveRecord数组

[英]Adding Add method to ActiveRecord array

我有型号和产品。 如果我使用category.products << new_product该项将添加到数组中,并将记录保存到数据库中。 我尝试将以下“add”方法添加到数组类中,虽然它确实将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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM