Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在创建新记录时覆盖原始记录 class公司:destroy 结束 类Ceo“Jobless”,:age=>46,:gender=>“male”)#这将创建一个名为“Jobless”的新首席执行官 c、 创建首席执行官(:name=>“Baldmer”,:age=>56,:gender=>“male”)#这将创建一个名为“Baldmer”的新首席执行官_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 在创建新记录时覆盖原始记录 class公司:destroy 结束 类Ceo“Jobless”,:age=>46,:gender=>“male”)#这将创建一个名为“Jobless”的新首席执行官 c、 创建首席执行官(:name=>“Baldmer”,:age=>56,:gender=>“male”)#这将创建一个名为“Baldmer”的新首席执行官

Ruby on rails 在创建新记录时覆盖原始记录 class公司:destroy 结束 类Ceo“Jobless”,:age=>46,:gender=>“male”)#这将创建一个名为“Jobless”的新首席执行官 c、 创建首席执行官(:name=>“Baldmer”,:age=>56,:gender=>“male”)#这将创建一个名为“Baldmer”的新首席执行官,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,一旦创建了第二个CEO,第一个CEO的公司id设置为零,我如何在创建第二个CEO后从数据库中删除第一个CEO?分配新值时,:dependent=>:destroy不会销毁旧的CEO记录。如果公司对象被销毁,只需销毁Ceo对象 如果您只是更改Ceo,您可以更改现有Ceo记录上的字段: class Company < ActiveRecord::Base has_one :ceo, :dependent => :destroy end class Ceo < ActiveRe

一旦创建了第二个CEO,第一个CEO的公司id设置为零,我如何在创建第二个CEO后从数据库中删除第一个CEO?

分配新值时,
:dependent=>:destroy
不会销毁旧的CEO记录。如果公司对象被销毁,只需销毁Ceo对象

如果您只是更改Ceo,您可以更改现有Ceo记录上的字段:

class Company < ActiveRecord::Base
  has_one :ceo, :dependent => :destroy
end

class Ceo < ActiveRecord::Base
  belongs_to :company
end

c = Company.find(1)
c.create_ceo(:name => "Jobless", :age => 46, :gender => "male") # This will create a new CEO named "Jobless"
c.create_ceo(:name => "Baldmer", :age => 56, :gender => "male") # This will create a new CEO named "Baldmer"
或者执行以下操作,这两种操作都会更改属性,并一次性保存记录

c.ceo.name = "Baldmer"
c.ceo.age = 56
c.ceo.save
# This doesn't create a new record, it simply changes the only already in place
或在创建新记录后明确销毁旧的Ceo记录:

c.ceo.update_attributes({:name => "Baldmer", :age => 56, :gender => "male"})
另一方面,如果你坚持现有的,并且有兴趣获得一份在DB中但目前不为公司工作的CEO名单,你可以:

c = Company.find(1)
jobless = c.create_ceo(:name => "Jobless", :age => 46, :gender => "male")
baldmer = c.create_ceo(:name => "Baldmer", :age => 56, :gender => "male")

jobless.destroy     # you need to explicitly destroy this Ceo record.
>没有公司的Ceo=Ceo.find(:all,:conditions=>“:company\u id=nil”)
=>[“失业”,年龄=>46岁,性别=>“男性”>]
试试这个:

 > ceos_without_companys = Ceo.find(:all, :conditions => ":company_id = nil")
=> ["<#Ceo, :name => "Jobless", :age => 46, :gender => "male">]

没错。在第一种情况下,您可以使用
c.ceo.update\u attributes
。在第二种情况下,我进一步建议将其包装在事务中,以确保您的数据库保持一致。请参阅。@normalocity,非常感谢,我想知道是否有一种内置机制,在c为公司分配了一个新的CEO,您可以在ActiveRecord对象上使用
:保存之前
回调来检查CEO是否将要更改(即,它是否在即将保存的属性列表中,并且与旧CEO不同)英译汉如果首席执行官即将更换,那么你就用它来破坏旧记录英译汉恐怕没有“读懂我的心思,自动解决此问题。你必须在某个地方给ActiveRecord一个你想要如何处理事情的提示。但是,还有一个注意事项,在销毁旧的CEO对象之前,请确保检查新属性的有效性(
CEO.valid?
),否则可能会出现无效的CEO对象,销毁旧对象,当新CEO对象验证失败时,您的公司将没有CEO(@normalocity,非常感谢您的回复,我想我必须在回调中销毁前任CEO。因此,没有这样一种内置机制,在公司分配新CEO时自动删除原CEO
class Company < ActiveRecord::Base
  has_one :ceo, :dependent => :destroy

  def assign_ceo options ={}
    Company.transaction do
      ceo.try(:destroy)
      create_ceo(options)
    end
  end
end
company.assign_ceo(:name => "Foo", ...)