【问题标题】:ruby on rails routing for non resource action用于非资源操作的 ruby​​ on rails 路由
【发布时间】:2013-02-16 18:20:44
【问题描述】:

我是 ruby​​ on rails 的新手。我已经有这些路线了

  namespace :swimming do resources :classschedules    end

现在我向这个控制器添加了一个新动作

class Swimming::ClassschedulesController < ApplicationController

  def date 
    @date = params[0]
  end
end

如何为这个新操作添加路线?

我想打电话给 Swimming/classschedules/date/2013-03-07 。这将是一个单一元素,而 2013-03-07 是我想在此操作中使用的参数。

【问题讨论】:

  • 正如@dimuch 所回答的,您可以为您指定的路线添加:collection 而不是:member。但具体的用例是什么?您想要特定 classschedule 还是所有 classschedule 的日期?

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


【解决方案1】:

当你想要一个像 /swimming/classcehdules/date/2012-12-03 这样的 url 来匹配 try:

namespace :swimming do
  resources :classschedules do
    get 'date/:date', :action => 'date', :as => :date, :on => :collection,
                      :constraints => { :date => /\d{4}-\d{2}-\d{2}/ }
  end 
end

额外的:constraint 是为了确保:date 参数是预期的形式。在您的操作中,您可以将日期获取为:

def date
   @date = params[:date] # => "2012-12-03"
end

查看http://guides.rubyonrails.org/routing.html 了解有关路由的更多信息。

【讨论】:

  • lwe,你需要告诉它把 get 放在哪里。在 collection do .... end 块内抛出 get 行。
  • 是的,添加 :on => :collection
【解决方案2】:
namespace :swimming do 
  resources :classschedules do
    get 'date', :on => :member # or collection
  end
end

更多信息guides

【讨论】:

  • ActiveRecord::RecordNotFound in Swimming::ClassschedulesController#show 找不到 Swimming::Classschedule with id=date
  • 您需要在单个元素(swimming/classschedules/1/date)还是在集合(swimming/classschedules/date)上调用此方法?
  • 我想打电话给 Swimming/classschedules/date/2013-03-07 。这将是一个单一元素,2013-03-07 是我想在此操作中使用的参数
  • 此答案可行,只需将:member 更改为:collection
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 2017-05-11
相关资源
最近更新 更多