-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我的Home#Index.html.erb.

但是,一旦页面加载,它会自动实例化每个对象DailyEntry以及WeeklyEntry所有 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

尝试“自信的代码”方法。在这种特殊情况下,滥用 和 等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 回答
0

这是我发现的作品:

在我的HomeController.rb

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

这会过滤掉已初始化但未保存的记录。

于 2013-03-10T19:04:25.843 回答