Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 根据某些特性将对象与现有对象关联_Ruby On Rails_Ruby On Rails 3_Ruby On Rails 3.1_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails 根据某些特性将对象与现有对象关联

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

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.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