Ruby on rails 在rails中创建或更新方法

Ruby on rails 在rails中创建或更新方法,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有这样的代码。我想改进它,让它使用一种方法,比如create\u或\u update if ClassName.exists?(["id = ?", self.id]) object = ClassName.find_by_name(self.name) object.update_attributes!( :street_address => self.street_address, :city_name => self.city_name, :name

我有这样的代码。我想改进它,让它使用一种方法,比如create\u或\u update

if ClassName.exists?(["id = ?", self.id])
  object = ClassName.find_by_name(self.name)
  object.update_attributes!( :street_address => self.street_address,
    :city_name => self.city_name,
    :name => self.org_unit_name,
    :state_prov_id => self.state_prov_id,
    :zip_code => self.zip_code)
else
  ClassName.create! :street_address => self.street_address,
    :city_name => self.city_name,
    :federalid => self.federalid,
    :name => self.org_unit_name,
    :state_prov_id => self.state_prov_id,
    :zip_code => self.zip_code
end
如果数据库中存在
名称
,则应更新该对象,否则应创建新对象

有没有什么方法可以让我这样做

    ClassName.create_or_update_by_name(:name => self.name,
    :street_address => self.street_address,
    :city_name => self.city_name,
    :federalid => self.federalid,
    :name => self.org_unit_name,
    :state_prov_id => self.state_prov_id,
    :zip_code => self.zip_code)
从Rails 6开始,
更新属性
更新属性
用于
更新
更新分别为:

my_class = ClassName.find_or_initialize_by_name(name)

my_class.update_attributes(
   :street_address => self.street_address,
   :city_name => self.city_name,
   :federalid => self.federalid,
   :state_prov_id => self.state_prov_id,
   :zip_code => self.zip_code
)

上面的检查答案对Rails 3很有效。也就是说,Rails 4中不推荐使用
find\u或\u initialize\u by\u属性
方法。这是新的方式。看


谢谢你。请注意,不必再次传入该名称,因为它已使用名称初始化。此外,这里不需要散列括号。因此操作是独立的,而不是在事务中。从Rails 4开始,find_或\u Initialize_by_方法已被弃用
my_class = ClassName.find_or_initialize_by_name(name)

my_class.update_attributes(
   :street_address => self.street_address,
   :city_name => self.city_name,
   :federalid => self.federalid,
   :state_prov_id => self.state_prov_id,
   :zip_code => self.zip_code
)
my_class.update(
   :street_address => self.street_address,
   :city_name => self.city_name,
   :federalid => self.federalid,
   :state_prov_id => self.state_prov_id,
   :zip_code => self.zip_code
)
person = Person.find_or_initialize(name: 'name')   
person.update_attributes(other_attrs)