kru*_*hah 25 ruby ruby-on-rails
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
Run Code Online (Sandbox Code Playgroud)
我有这样的代码.我想改进它,以便它使用一个方法,比如create_or_update.
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)
Run Code Online (Sandbox Code Playgroud)
如果name数据库中存在,那么它应该更新该对象,否则它应该创建一个新对象.
是否存在任何我可以使用的方法?
Ju *_*ira 81
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
)
Run Code Online (Sandbox Code Playgroud)
上面检查的答案适用于Rails 3.这表示find_or_initialize_by_attribute方法在Rails 4中已弃用.这是新的方法.请参阅find_or_initialize_by方法的Rails4 Deprecation警告
person = Person.find_or_initialize(name: 'name')
person.update_attributes(other_attrs)
Run Code Online (Sandbox Code Playgroud)
person = Person.find_by_name(name) || Person.new(:name => name)
person.update_attributes!(:street_address => street_address, :city_name => city_name) #etc etc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33331 次 |
| 最近记录: |