【发布时间】:2015-12-26 09:41:33
【问题描述】:
我试图阻止页面显示,除非 params[:userid] 是整数。
我知道代码正在被调用,因为它没有抛出错误,也没有渲染,我手动告诉它渲染,然后不渲染来检查。
这是我用来尝试的方法:
render nothing: true unless params[:userid].is_a? Integer
通过快速阅读 Rails,这应该可行,至少在理论上我想是这样。路线设置正确,因为我检查了它并让页面读回:userid。控制台没有抛出任何错误,但这里是使用/account/jonathan/settings 作为路由时的读数:
在 2015-09-28 23:04:24 -0400 开始为 127.0.0.1 获取“/” ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations" PagesController#home 处理为 HTML 在布局/应用程序中渲染页面/home.html.erb (1.1ms) 在 124 毫秒内完成 200 次 OK(查看次数:117.6 毫秒 | ActiveRecord:0.0 毫秒)
在 2015-09-28 23:04:31 -0400 开始为 127.0.0.1 获取“/” PagesController#home 处理为 HTML 在布局/应用程序中渲染页面/home.html.erb (0.0ms) 在 15 毫秒内完成 200 次 OK(查看次数:14.9 毫秒 | ActiveRecord:0.0 毫秒)
在 2015-09-28 23:04:32 -0400 开始为 127.0.0.1 获取“/account/jonathan/settings” AccountController#settings 处理为 HTML 参数:{"userid"=>"jonathan"} 渲染文本模板(0.0ms) 1ms 内完成 200 OK (Views: 0.8ms | ActiveRecord: 0.0ms)
在 2015-09-28 23:04:38 -0400 开始为 127.0.0.1 获取“/account/jonathan/settings” AccountController#settings 处理为 HTML 参数:{"userid"=>"jonathan"} 渲染文本模板(0.0ms) 1ms 内完成 200 OK (Views: 0.2ms | ActiveRecord: 0.0ms)
当使用/account/1/settings 作为路由时:
于 2015-09-28 23:27:00 -0400 开始为 127.0.0.1 获取“/account/1/settings” AccountController#settings 处理为 HTML 参数:{"userid"=>"1"} 渲染文本模板(0.0ms) 1ms 内完成 200 OK (Views: 0.2ms | ActiveRecord: 0.0ms)
于 2015-09-28 23:27:00 -0400 开始为 127.0.0.1 获取“/account/1/settings” AccountController#settings 处理为 HTML 参数:{"userid"=>"1"} 渲染文本模板(0.0ms) 1ms 内完成 200 OK (Views: 0.2ms | ActiveRecord: 0.0ms)
我尝试过使用/account/1/settings 和/account/jon/settings 之类的路由,但都没有显示出什么问题。
【问题讨论】:
-
在
{"userid"=>"jonathan"}中,值是一个字符串。那么,有什么问题呢? -
@CodeGnome 即使将 Jonathan 替换为 1,它仍然永远不会呈现
-
因为
"1"也是一个字符串。这整个问题似乎是一个 X/Y 问题。您真正想通过基于params[:userid]的条件渲染来解决什么功能问题? -
我试图使用参数作为一种方式来获取用户访问令牌以进行身份验证,然后才能访问该页面,否则会给他们一个错误,或者将他们发送到登录页面。跨度>
-
1) 这是不安全的。不要滚动您自己的身份验证;使用设计或类似的。 2) 如果您不关心真正的安全性:
redirect_to :login if params[:userid].blank?确保存在 userid。
标签: ruby-on-rails ruby-on-rails-4 boolean-expression