我用scaffold创建了一个模型和控制器。它运作良好。然后我开始编辑/删除一些控制器动作。所以我做了参与/新>参股/注册。
这不起作用,它说“未知行动”,但确实说它有行动注册。有趣的是,如果我使用首都P参加参与/注册,那么它确实有效!
我也做了Rake路线,即使我编辑了方法名称,仍然会显示参与/ new。
我需要做些什么来定义行动吗?
答案 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_path
或signup_url
。
答案 3 :(得分:0)
如果我没记错,RoR区分大小写,因此请确保控制器以小写“p”开头,并且所有操作也以小写字母开头。尝试一下