Ruby On Rails中的路由

时间:2009-02-06 07:36:43

标签: ruby-on-rails

我用scaffold创建了一个模型和控制器。它运作良好。然后我开始编辑/删除一些控制器动作。所以我做了参与/新>参股/注册。

这不起作用,它说“未知行动”,但确实说它有行动注册。有趣的是,如果我使用首都P参加参与/注册,那么它确实有效!

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

我需要做些什么来定义行动吗?

4 个答案:

答案 0 :(得分:4)

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

map.resources :participations

您必须为此添加新规则:

map.signup '/participations/signup', :controller => 'participations', :action => 'new'
应该这样做。

答案 1 :(得分:3)

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

即,如果你有

  

map.resources :participations

并且您不希望使用其他答案建议的命名路线,您有以下选项:

  • 将/ participations / new更改为 /参与/注册,但仍然 保持新的行动在 控制器

      

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

  • 使用/参与/注册,以及控制器中的操作注册:

      

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

如果您还想限制以便他们无法使用/ participations / new操作,请将:except => :new添加到上述语句

我建议你使用这种方式,除非你有理由使用命名路线,因为它(至少我的意见)给出了一个更清晰的路线.rb。

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

如果我没记错,RoR区分大小写,因此请确保控制器以小写“p”开头,并且所有操作也以小写字母开头。尝试一下