创建新记录时nil:NilClass的未定义方法'id'

时间:2018-10-14 12:59:18

标签: ruby-on-rails ruby

我有两个表“ Journeys”和“ stop” 当我创建新旅程时,我需要创建一个站点。 站点也是参考站表。这很好:

@stop = Stop.create(Station.find_by("Station name ").id)

但是当我尝试以下操作时,它给了我

  

nil:NilClass错误的未定义方法'id'

name = "whatever" 
@stop = Stop.create(Station.find_by(name: name).id)

3 个答案:

答案 0 :(得分:1)

findfind_by不同,Model.find_by(field: "value") 使用哈希参数,因此您应该像这样使用它:

find_by!

出现此错误是因为数据库上没有给定名称的记录。您也可以尝试ActiveRecord::RecordNotFound,当记录不存在时会引发{{1}}异常。

答案 1 :(得分:0)

我们如何确定find_by名称返回一个Station对象?我们不能。 这样会更安全

if station = Stating.find_by(name: name) # returns nil if no record with name
  @stop = Stop.create(station.id)
end

答案 2 :(得分:0)

简单,车站表中没有“任何”名称条目。

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:autoMirrored="true"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
    <path
        android:fillColor="#FFFFFFFF"
        android:pathData="M2.01,21L23,12 2.01,3 2,10l15,2 -15,2z" />
</vector>

如果您想忽略该错误并返回nil