【问题标题】:How do you route an action to the application controller in Rails 3?在 Rails 3 中,如何将动作路由到应用程序控制器?
【发布时间】:2011-06-14 06:42:23
【问题描述】:

我正在使用 gem rails3-jquery-autocomplete 并且没有任何问题,但是我现在已经将我的自动完成表单移动到应用程序模板中,因此 ajax 调用现在由应用程序控制器处理,所以我的路线有更改自:

home/autocomplete_category_name

现在需要移除 home 和路径:

home_autocomplete_category_name_path

到:

autocomplete_category_name_path

有人有什么想法吗?仍在学习 Rails 的来龙去脉,所以现在这对我来说是个死胡同。

谢谢。

【问题讨论】:

  • 最好发布当前路由的实际 RoR 代码以及您定位的 URL。
  • 另外,通过在您的项目根目录的控制台输入rake routes 来包含您当前的路线。

标签: ruby-on-rails ruby-on-rails-3 routes applicationcontroller


【解决方案1】:

旧帖子,但接受的答案是错误的。尽管它的精神是正确的 - 您可能应该将您的方法移至更合适的控制器;但是如果您坚持在 application_controller.rb 中使用该方法

# routes.rb
match '/some_route', to: 'application#some_route', as: :some_route

...将路由到 application_controller.rb 中的 'some_route' 方法。

【讨论】:

  • 使用 getpost 等...,而不是 match 用于更高版本的 Rails
【解决方案2】:

URL 不会直接映射到 ApplicationController - 只是它的子类。

您需要将调用 autocomplete 转移到另一个控制器中。只要您在定义text_field时传递正确的路径,表单的位置就不会产生影响。

【讨论】:

  • 我已经完全按照你说的做了,这不是一个雄辩的解决方案,但它确实有效,谢谢!
  • 如果你愿意,可以路由到 ApplicationController - 只是违反事物的约定
  • 如果我想将它设置为我的应用程序的根路径怎么办?
【解决方案3】:

另一个死灵,但与 pavling 的解决方案相比,有一种更 DRY 友好的方式来做到这一点

get :autocomplete_category_name, controller:"application"

我试图(昨天)将其移至应用程序控制器,以尝试更好地重用代码,而不是将其绑定到特定控制器。直到今天我才意识到这是没有意义的,因为用于应答此调用的控制器将是与渲染视图的控制器完全不同的对象..

【讨论】:

  • 非常适合非特定于控制器的通用调用。
【解决方案4】:

使用 Rails 4,你必须使用 get,而不是 match...

# routes.rb
get '/autocomplete_category_name', to: 'application#autocomplete_category_name', as: :autocomplete_category_name

【讨论】:

  • 你没有...你可以添加via:选项。
【解决方案5】:

试试类似的东西

match "home/autocomplete_category_name", "home#autocomplete_category_name", :as => "autocomplete_category_name"

【讨论】:

    【解决方案6】:

    在 Rails 4 中,使用这个:

    get 'application/autocomplete_category_name', as: 'autocomplete_category_name'
    

    你的链接有“autocomplete_category_name_path”

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多