首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >rails中的create_or_update方法

rails中的create_or_update方法
EN

Stack Overflow用户
提问于 2010-06-11 23:18:30
回答 3查看 35.6K关注 0票数 25
代码语言:javascript
复制
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

我有这样的代码。我想改进它,这样它就可以使用一种方法,比如create_or_update。

代码语言:javascript
复制
    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)

如果name存在于数据库中,那么它应该更新该对象,否则它应该创建一个新对象。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-12 01:30:41

代码语言:javascript
复制
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 6、update_attributes!update_attributes is deprecated开始,分别针对update!update

代码语言:javascript
复制
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
)
票数 82
EN

Stack Overflow用户

发布于 2014-04-30 21:05:22

上面的检查答案适用于Rails3。也就是说,find_or_initialize_by_attribute方法在Rails4中被弃用了。这是一种新的方式。请参阅Rails4 Deprecation warning for find_or_initialize_by method

代码语言:javascript
复制
person = Person.find_or_initialize(name: 'name')   
person.update_attributes(other_attrs)
票数 10
EN

Stack Overflow用户

发布于 2010-06-12 01:17:45

代码语言:javascript
复制
person = Person.find_by_name(name) || Person.new(:name => name)
person.update_attributes!(:street_address => street_address, :city_name => city_name) #etc etc
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3024010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档