Возможно, потому что 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 имеет много способов проверить это, вам не нужно делать это вручную.