2009-02-06 111 views
0

我用脚手架来创建模型和控制器。它运作良好。然后我开始编辑/删除一些控制器操作。所以我让参与/新>参与/注册。Ruby on Rails路线

这不起作用,它说“未知动作”,但它确实说它有动作注册。有趣的是,如果我使用大写字母P去参与/注册,那么它的确行得通!

我也做了Rake路线,即使我编辑了方法名称,参与/新仍然显示出来。

我需要做什么来定义动作?

回答

0

如果我没有记错,RoR区分大小写,所以请确保您的控制器以小写字母“p”开头,任何动作也以小写字母开头。试一试

4

您还需要编辑config/routes.rb文件,并告诉Rails它应该如何处理参与/注册路线。在你的routes.rb文件,你应该有这样的:

map.resources :participations 

你将不得不增加一个新的规则是:

map.signup '/participations/signup', :controller => 'participations', :action => 'new' 

临屋应该这样做。

1

维护标准RESTful路由和控制器操作并将用户友好的替代路径映射到它们上并不罕见。例如,你的情况:

map.signup '/signup', :controller => 'participations', :action => 'new' 

你的用户可以再在非常友好的URL http://foo.com/signup(如果,当然,你的网站是在foo.com)访问participations#new。在您的控制器和视图中,您可以将此路线称为signup_pathsignup_url

3

如果您正在使用资源,则很容易修复。

也就是说,如果你有

map.resources :participations

,你不希望使用命名路由像其他答案建议,您有以下选择:

  • 要更改/参与/新到 /参与/注册,但仍然 保持新在 控制器

    map.resources :participations, :path_names => {:new => 'signup'}

  • 的操作要在控制器使用/参股/注册,并且动作注册:

    map.resources :participations, :collection => {:signup => [:get, :post]}

如果您还想限制他们不能使用/参与/新动作,请将:except => :new添加到上述语句

我建议您使用这种方法,除非您有使用指定路由的理由,因为它(至少这是我的意见)给出了一个更清洁routes.rb。

请记住,routes.rb是从顶部到底部读取的,因此第一个匹配的路由将是正在使用的路由。