如何绕过我的控制器中创建的nil对象?

时间:2013-03-10 03:08:15

标签: ruby-on-rails ruby-on-rails-3

所以这是我的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

之所以这样,是因为我正在尝试为DailyEntry上的WeeklyEntryHome#Index.html.erb对象类型创建两个表单部分。

但是,一旦页面加载,它会自动使用所有nil值实例化每个DailyEntryWeeklyEntry的对象。因此,每当我执行一个简单的@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个调用之外,如何在此页面上为each个循环解决这些nil对象?

2 个答案:

答案 0 :(得分:0)

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

观看this video with Avdi Grimm,它可以很好地解释这些关于自信代码的内容。

希望有所帮助:)

答案 1 :(得分:0)

这是我发现的作品:

在我的HomeController.rb

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

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