Ruby on rails 根据某些特性将对象与现有对象关联
A属于B。从对象A的控制器的创建方法来看,如何根据对象B的某些属性查看所有对象B,并获得某个匹配对象B的id?最终目标是使用B_id外键将A分配给适当的B对象 这就是我目前拥有的,尽管它只创建新对象,无法找到要关联的旧对象。我最终得到了一堆同名但ID不同的主机:Ruby on rails 根据某些特性将对象与现有对象关联,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,Ruby On Rails 3.2,A属于B。从对象A的控制器的创建方法来看,如何根据对象B的某些属性查看所有对象B,并获得某个匹配对象B的id?最终目标是使用B_id外键将A分配给适当的B对象 这就是我目前拥有的,尽管它只创建新对象,无法找到要关联的旧对象。我最终得到了一堆同名但ID不同的主机: #assign line to host begin #attempt to assign line to existing host line.hos
#assign line to host
begin
#attempt to assign line to existing host
line.host = host.where(:name => line.hostname).first
rescue
#create new host
line.host = Host.new({:name => line.hostname})
end
我不太明白。除了
a.b=b.where(…)。你还需要什么?首先,
?@FrederickCheung这听起来正是我需要的。我以前从未使用过,也不知道。我正在尝试你提供给我的东西,尽管到目前为止它只是创建新的对象,而没有找到与之关联的旧对象。使用像这样的援救是个坏主意-你不知道你在援救什么(例如,它可能是由于打字错误而导致的命名错误)。当找不到对象时,您编写的代码不会出现-它只返回nil,因此rescue没有任何用处-只需检查返回值(但也请参见first\u或\u create
)@FrederickCheung谢谢!之后的错误消息非常有用,足以找到我的问题。吸取的教训。
#assign line to host
line.host = Host.where(:name => line.hostname).first_or_create