我用脚手架来创建模型和控制器。它运作良好。然后我开始编辑/删除一些控制器操作。所以我让参与/新>参与/注册。Ruby on Rails路线
这不起作用,它说“未知动作”,但它确实说它有动作注册。有趣的是,如果我使用大写字母P去参与/注册,那么它的确行得通!
我也做了Rake路线,即使我编辑了方法名称,参与/新仍然显示出来。
我需要做什么来定义动作?
我用脚手架来创建模型和控制器。它运作良好。然后我开始编辑/删除一些控制器操作。所以我让参与/新>参与/注册。Ruby on Rails路线
这不起作用,它说“未知动作”,但它确实说它有动作注册。有趣的是,如果我使用大写字母P去参与/注册,那么它的确行得通!
我也做了Rake路线,即使我编辑了方法名称,参与/新仍然显示出来。
我需要做什么来定义动作?
如果我没有记错,RoR区分大小写,所以请确保您的控制器以小写字母“p”开头,任何动作也以小写字母开头。试一试
您还需要编辑config/routes.rb文件,并告诉Rails它应该如何处理参与/注册路线。在你的routes.rb文件,你应该有这样的:
map.resources :participations
你将不得不增加一个新的规则是:
map.signup '/participations/signup', :controller => 'participations', :action => 'new'
临屋应该这样做。
维护标准RESTful路由和控制器操作并将用户友好的替代路径映射到它们上并不罕见。例如,你的情况:
map.signup '/signup', :controller => 'participations', :action => 'new'
你的用户可以再在非常友好的URL http://foo.com/signup
(如果,当然,你的网站是在foo.com)访问participations#new
。在您的控制器和视图中,您可以将此路线称为signup_path
或signup_url
。
如果您正在使用资源,则很容易修复。
也就是说,如果你有
map.resources :participations
,你不希望使用命名路由像其他答案建议,您有以下选择:
要更改/参与/新到 /参与/注册,但仍然 保持新在 控制器
map.resources :participations, :path_names => {:new => 'signup'}
的操作要在控制器使用/参股/注册,并且动作注册:
map.resources :participations, :collection => {:signup => [:get, :post]}
如果您还想限制他们不能使用/参与/新动作,请将:except => :new
添加到上述语句
我建议您使用这种方法,除非您有使用指定路由的理由,因为它(至少这是我的意见)给出了一个更清洁routes.rb。
请记住,routes.rb是从顶部到底部读取的,因此第一个匹配的路由将是正在使用的路由。