2011-09-26 43 views
1

我已经得到了以下声明:如果单纯没有找到记录语句的问题

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

的问题是,如果没有意见,它抛出错误未找到记录。我怎么能让这个失败默默无闻,所以它什么都不会返回?

+2

@ task.comments应该回到你的评论列表,如果有任何其他空数组,则是否已正确设置关系。 –

回答

5

你正在尝试做不能正常工作。

该行find(@task.id)将寻找与task具有相同id的注释,这通常不是您建立关系的方式。

通常你将有一个任务和意见表,意见表将有一个名为task_id列。如果是这样的话,可以按如下方式写你的模型:

class Task 
    has_many :comments 
end 

class Comment 
    belongs_to :task 
end 

,然后你可以简单的写:

@all_comments = @task.comments 
+0

我完全错过了! – d11wtq

1

我不使用AR,但我相信只是:

@all_comments = Comment.find(:first, @task.id) 

将返回nil,如果没有找到记录,不像#find没有任何修饰。

编辑|有一个快捷方式太:

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

我认为你的失败是一个不同的你期望。查询请求与ID @task.id(其为Task的ID)的Comment

您的查询应该这样:

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

甚至更​​好

@task.comments 

这应该工作,如果你有相应的声明你的关系,并允许一些更多的选择(添加评论,.. )。

看一看的"Rails Guides",和那里的"Active Record Query Interface"

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)