【问题标题】:Rails 3 - new controller action routeRails 3 - 新的控制器动作路线
【发布时间】:2014-03-09 18:20:39
【问题描述】:

我有一个包含在线培训的应用程序,每个在线培训都有几个章节。我不想仅仅为培训章节创建下一个控制器。我想在 TrainingsController 中有新的动作,它可能被称为章节。然后我想要这样的网址:

/trainings/1/chapter/3

(/controller/训练的id/action/章节的id)

您能帮我如何设置 routes.rb 来实现这种行为吗?我尝试了很多东西,但它仍然坏了。

提前谢谢你!

彼得

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rails-routing


    【解决方案1】:

    您可以将路线定义为:

    resources :trainings do 
      get 'chapter/:chapter_id', action: :chapter, as: :training_chapter, constraints: { chapter_id: /\d+/ }
    end
    

    然后在你的trainings_controller.rb

    def chapter
      # params[:chapter_id]
      ...
    end
    

    get 'chapter/:chapter_id', action: :chapter, as: training_chapter, constraints: { chapter_id: /\d+/ } 行定义了一个get 路由,格式为training/:id/chapter/:chapter_id,它执行TrainingController 中的chapter 操作。

    这条路由的名字是training_chapter,由as: :training_chapter定义,所以你可以使用命名的路由助手比如training_chapter_trainings_path

    最后一个选项constraints: /\d+/ 是限制chapter_id 可以保存的值,基于这些值执行此路由。因此,对/trainings/1/chapter/1 的获取请求会执行chapter 操作,而/trainings/1/chapter/a 不会,因为chapter_id 的值a 是非数字的。

    【讨论】:

      【解决方案2】:

      我想这就是你要找的东西:

      match '/trainings/:training_id/chapter/:chapter_id' => 'trainings#chapter', :as => 'chapter_training'
      

      app/controllers/trainings_controller.rb

      def chapter
      end
      

      【讨论】:

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