0

A属于B.从对象A的控制器的create方法,我如何根据它们具有的某些属性查看所有对象B并获取某些属性的id匹配对象B?最终目标是使用b_id外键将A赋值给正确的B对象。根据某些属性将对象与现有对象关联

这是我目前有,虽然它只创建新的对象,并没有找到旧的关联。我结束了同名一堆的主机,但具有不同ID:

 #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 
+0

我不知道我理解。除了'a.b = B.where(...)。first''之外,你还需要什么? –

+0

@FrederickCheung听起来像我需要的东西。我从来没有使用过,并没有意识到这一点。我将包括我的尝试都包括在内,尽管到目前为止它只是创建新的对象,并没有找到与之相关的旧对象。 – blaha

+0

Usin这样的救援是一个糟糕的主意 - 你不知道你在救援什么(例如,它可能是由于错字造成的nomethoderror)。当没有找到对象时,你编写的代码不会被引发 - 它只返回nil,所以救援没有任何用处 - 只需检查返回值(但也请参阅'first_or_create') –

回答

-1
 #assign line to host 
      line.host = Host.where(:name => line.hostname).first_or_create 
+1

请不要只发布一行代码。解释一下。 -1 – Manishearth