可能是因为params [:id]这是一个字符串和article.id这是一个整数
(byebug) params
{"controller"=>"admin/my_controller","action"=>"edit","id"=>"1"}
是的,它是...“ id”是字符串“ 1”,因此您可以尝试以下操作:
def show
id = params[:id].to_i
list = Article.all
is_valid = false
list.all.each do |article|
if article.id == id
@is_valid = true
break
end
end
end
也许可以工作。
这是您问题的答案,
但是,如果您想了解更多有关Activerecord的信息,可以这样做
Article.exists?(params[:id])
这将完成您要针对db的查询所做的尝试。
如果您只想获得简单的文章
record = Article.find_by(id: params[:id]) #return nil when not exist
if record # if nil will threat like false on ruby
#my code when exist
else
#my code when not exist
end
将起作用(您也可以使用find,但是当不存在时find会抛出异常ActiveRecord :: RecordNotFound,因此您必须捕获该异常。
Activerecord有很多方法可以检查此情况,而您无需手工完成。
,
def show
@article = Article.find(params[:id])
end
这将创建一个数据库查询,该查询返回一行。如果找不到记录,则.find
引发ActiveRecord::NotFound
异常。 Rails捕获此错误并显示404页。 Article.find_by(id: params[:id])
是不会提高的“安全”替代方案。
您的代码有问题,因为list = Article.all
会将所有记录加载到数据库之外,这很慢,并且如果您有足够的文章,则会耗尽服务器上的内存。这是解决任务的最无效的方法。
如果您只想测试是否存在,请使用.exists?
或.any?
。这将创建一个COUNT
查询,而不是选择行。
Article.where(title: 'Hello World').exists?
本文链接:https://www.f2er.com/3121878.html