如果未找到记录的语句问题,则简单

时间:2011-09-26 11:18:52

标签: ruby-on-rails ruby

我有以下声明:

@all_comments = Comment.find(@task.id)

问题是,如果没有注释,则会抛出记录未找到错误。如何让它无声地失败,所以它什么都不返回?

4 个答案:

答案 0 :(得分:5)

你要做的事情永远不会奏效。

find(@task.id)行会查找与id具有相同task的评论,而这通常不是您设置关系的方式。

通常你会有一个任务和一个评论表,而评论表会有一个名为task_id的列。如果是这种情况,您可以按如下方式编写模型:

class Task
  has_many :comments
end

class Comment
  belongs_to :task
end

然后你可以简单地写:

@all_comments = @task.comments

答案 1 :(得分:1)

我不使用AR,但我相信:

@all_comments = Comment.find(:first, @task.id)
如果找不到记录,

将返回nil,而不像#find没有任何修饰符。

编辑|还有一条捷径:

@all_comments = Comment.first(@task.id)

答案 2 :(得分:1)

我认为你的失败与你期望的不同。您的查询要求Comment标识为@task.idTask的ID)。

您的查询应该是这样的:

@all_comments = Comment.where(:task_id => @task.id)

甚至更好

@task.comments

如果您已相应地声明了您的关系,并且允许更多选项(添加注释,......),这应该有效。

查看"Rails Guides",然后查看"Active Record Query Interface"

答案 3 :(得分:0)

导轨会导致RecordNotfound次呼叫find异常。使用find_by来避免这种情况。

如果您尝试通过task_id获取任务列表,请使用find_all_by方法:

# returns an empty array when no tasks are found
@comments = Comment.find_all_by_task_id(@task.id)

否则使用find_by

# returns nil when no task is found
@comment = Comment.find_by_task_id(@task.id)