【问题标题】:understanding passing rails parameters between controllers了解在控制器之间传递 rails 参数
【发布时间】: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


    【解决方案1】:

    如果没有看到更多带有某些上下文的代码,很难回答这个问题。但是,如果您想使用 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)
    

    【讨论】:

      猜你喜欢
      • 2015-12-21
      • 2016-03-02
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      相关资源
      最近更新 更多