我已经得到了以下声明:如果单纯没有找到记录语句的问题
@all_comments = Comment.find(@task.id)
的问题是,如果没有意见,它抛出错误未找到记录。我怎么能让这个失败默默无闻,所以它什么都不会返回?
我已经得到了以下声明:如果单纯没有找到记录语句的问题
@all_comments = Comment.find(@task.id)
的问题是,如果没有意见,它抛出错误未找到记录。我怎么能让这个失败默默无闻,所以它什么都不会返回?
你正在尝试做不能正常工作。
该行find(@task.id)
将寻找与task
具有相同id
的注释,这通常不是您建立关系的方式。
通常你将有一个任务和意见表,意见表将有一个名为task_id
列。如果是这样的话,可以按如下方式写你的模型:
class Task
has_many :comments
end
class Comment
belongs_to :task
end
,然后你可以简单的写:
@all_comments = @task.comments
我完全错过了! – d11wtq
我不使用AR,但我相信只是:
@all_comments = Comment.find(:first, @task.id)
将返回nil,如果没有找到记录,不像#find
没有任何修饰。
编辑|有一个快捷方式太:
@all_comments = Comment.first(@task.id)
我认为你的失败是一个不同的你期望。查询请求与ID @task.id
(其为Task
的ID)的Comment
。
您的查询应该这样:
@all_comments = Comment.where(:task_id => @task.id)
甚至更好
@task.comments
这应该工作,如果你有相应的声明你的关系,并允许一些更多的选择(添加评论,.. )。
轨道抛出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)
@ task.comments应该回到你的评论列表,如果有任何其他空数组,则是否已正确设置关系。 –