【发布时间】:2014-08-26 23:31:46
【问题描述】:
我刚刚开始研究 Rails 中的参数。我目前正在从事一个公众无法访问的项目,因此在这种情况下,确保参数的安全并不是一个优先事项。
我有一个指向不同控制器操作的 link_to,它需要一个对象 id 来完成控制器操作。
=link_to "Barcode", print_barcode_label_admin_items_path(:item_to_print => { :article_id => article.id })
然后在相关的控制器中
def print_barcode_label
if params[:item_to_print][:article_id].present?
return if force_format :pdf
..........
private
def params_document
params.require(:document).permit!
end
当我为这个控制器编写代码时,我确定参数正在被传递(我正在使用 better-errors gem 进行调试,因此我可以看到它们在请求参数哈希中传递)。但是现在,不确定我做了什么,但我得到了错误
undefined method `[]' for nil:NilClass
在我上面的控制器操作中的第二行失败。我确信我缺少一些非常基本的东西。它是什么?有没有更有利的方式来做到这一点?
更新
所以我开始尝试其他可能的解决方案,其中一个是命名一个专门携带参数的路由
get 'print_barcode_label/:article_id', to: 'documents#print_barcode_label', as: 'print_barcode_label'
这似乎是一种更稳健、更明智的方法。然而,尽管在链接中传递了变量,像这样
=link_to "Barcode", print_barcode_label_admin_items_path(article.id)
给出无路由匹配错误
No route matches {:action=>"print_barcode_label", :controller=>"admin/documents"} missing required keys: [:article_id]
【问题讨论】:
标签: ruby-on-rails