我刚刚开始围绕rails中的参数。我目前正在开展一个公众无法访问的项目,因此在这种情况下保持params安全并不是一个优先事项。
我有一个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
在我的上述控制器操作中第2行失败。我确信有一些我非常缺席的东西。它是什么?有没有更有利的方法呢?
所以我开始玩其他可能的解决方案,一个是命名一个专门带有参数
的路线 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]
答案 0 :(得分:0)
如果没有在某些背景下看到更多代码,很难回答这个问题。但是如果你想做rails方式,你应该可以在文档资源上创建自定义操作。
在您的routes.rb中:
namespace :admin do
resources :documents
get :print_barcode_label, :on => :member
end
end
然后您可以创建此操作的链接:
= link_to 'Barcode', print_barcode_label_admin_document_path(article)