gpt4 book ai didi

ruby-on-rails-3 - accpets_nested_attributes_for、HABTM 和 find_or_create

转载 作者:行者123 更新时间:2023-12-05 01:29:01 27 4
gpt4 key购买 nike

我使用 Rails 的 accepts_nested_attributes_for 方法取得了巨大的成功,但是如果记录已经存在,我怎么能不创建新记录呢?

我找到了这篇文章,accepts_nested_attributes_for with find_or_create?但它似乎对我不起作用。

我在包和许可证之间有一个多对多的关系。表中应该只有一个许可证实例,例如:我不应该有两个名为“Awesome”的许可证

所需的功能是当我创建一个包时,将许可证名称作为属性传递,如果该名称尚不存在则创建一个新许可证,或者在现有许可证(具有提供的名称)和包裹。

这是我的模型的样子:

class Package < ActiveRecord::Base
has_and_belongs_to_many :licenses, :autosave => true
accepts_nested_attributes_for :licenses
end

class License < ActiveRecord::Base
attr_accessible :name
has_and_belongs_to_many :packages
validates :name, :presence => true
end

最佳答案

我有一个类似的问题并通过回调 Hook 解决了它。在我的情况下,我有一个 Status 模型和一个 Person 模型。我想让用户在他们的状态更新中标记多个人(人),只需输入一个名字并创建一个新的人(这些不映射到用户,顺便说一句,它只是供私有(private)使用)如果匹配的人不存在.

class Person < ActiveRecord::Base
has_and_belongs_to_many :statuses
end

Class Status < ActiveRecord::Base
has_and_belongs_to_many :people
accepts_nested_attributes_for :people
before_save :get_people

def get_people
self.people.map! do |person|
Person.find_or_create_by_name(person.name)
end
end
end

关于ruby-on-rails-3 - accpets_nested_attributes_for、HABTM 和 find_or_create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448813/

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