Ruby on rails 在rails中创建或更新方法
我有这样的代码。我想改进它,让它使用一种方法,比如create\u或\u updateRuby 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
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)