-1

だからこれは私のコントローラーですHome#Index

class HomeController < ApplicationController
  def index
    @daily_entries = current_user.daily_entries
    @weekly_entries = current_user.weekly_entries
    @daily_entry = current_user.daily_entries.new
    @weekly_entry = current_user.weekly_entries.new
  end
end

これがこのような理由は、でオブジェクトタイプDailyEntryWeeklyEntryオブジェクトタイプの両方を作成するために2つのフォームパーシャルをレンダリングしようとしているためHome#Index.html.erbです。

ただし、ページが読み込まれるDailyEntryWeeklyEntry、すべてのnil値を使用してそれぞれのオブジェクトが自動的にインスタンス化されます。したがって、単純な@daily_entries.eachループを実行すると、レコード自体ではなくても、nil値が多数あるレコードが発生しますnil

このような:

 #<DailyEntry id: nil, breakfast: nil, snack_1: nil, lunch: nil, snack_2: nil, dinner: nil, water_intake: nil, workout: nil, notes: nil, created_at: nil, updated_at: nil, user_id: 1>]

呼び出しを削除する以外に、このページcurrent_user.daily_entries.newのループでこれらのnilオブジェクトを回避するにはどうすればよいですか?each

4

2 に答える 2

0

これは私が見つけたものです:

私の中でHomeController.rb

@daily_entries = current_user.daily_entries.where(:id == true)

これにより、初期化されているが保存されていないレコードが除外されます。

于 2013-03-10T19:04:25.843 に答える
0

「自信のあるコード」アプローチを試してください。この特定のケースでは、to_sやなどのメソッドを悪用しますto_i。例はよりうまく機能します:

@daily_entries.each do |daily_entry|
  # If it's a String, nothing happens, if it's nil, empty string will be returned.
  string_val = daily_entry.breakfast.to_s

  # If it's a Fixnum, nothing happens, if it's nil, 0 will be returned.
  int_val = daily_entry.id.to_i
end

Avdi Grimm と一緒にこのビデオを見てください。自信のあるコードに関するこの内容が非常によく説明されています。

それが役に立てば幸い :)

于 2013-03-10T03:30:45.290 に答える