0

こんにちは、find_by_id を実行しようとしていますが、id が存在しない場合にこのメソッドを呼び出すと、nil クラスが取得されます

if current_user.admin?
  @schedules = Schedule.all
elsif current_user.team_id?
  @schedules = Schedule.find_by_team_id(current_user[:team_id])
end

エラー

スケジュールの NoMethodError#index

/Users/ /Sites/Rails/ * /app/views/schedules/index.html.haml を表示し、44 行目が発生しました:

nil:NilClass の未定義メソッド「each」 抽出されたソース (44 行目付近):

41:               %th Location
42:               %th{:style => "color: #675100;background: url(\"/img/sprites/alertboxes/bg-warning.png\") repeat-x #ffe68b;"} Manager
43:           %tbody
44:             - @schedules.each do |schedule|
45:               %tr
46:                 %td= event_display(schedule.event)
47:                 %td
4

2 に答える 2

1

find_by_ を使用している場合、これは通常の動作であり、その属性のレコードが見つからない場合は nil を返します。また、find_by_ は Enumerable ではなくレコードのみを返すことに注意してください。代わりに where(...) または find_all_by_ を使用する必要があります

于 2012-07-15T10:37:10.210 に答える
0

ID によるオブジェクトの検索と属性によるオブジェクトの検索の違いは次のとおりです。

  1. 主キー検索方法(ID による)

    @schedules = Schedule.find(<schedule_id>)

    Result : 見つかった場合はオブジェクトを返します。見つからない場合はエラーをスローします。

  2. Dynamic Finder メソッド(任意の属性による)

    この場合、オブジェクトの属性のいずれかを調べることで、オブジェクトを見つけることができます。

    @schedules = Schedule.find_by_team_id(<attribute_id>)

    Result : 見つかった場合はオブジェクトを返します。見つからない場合は nil を返します。

エラーをスローしたくない場合、または特定の属性のオブジェクトが存在するかどうかを確認したい場合は、動的ファインダー メソッドを使用します。

于 2013-09-13T16:08:07.900 に答える