我有一个带有admin命名空间的rails 4应用程序和一个名为Gametime的模型
namespace :admin do
resources :gametimes
end
模型是game_time.rb
class GameTime < ActiveRecord::Base
end
索引和show动作正常。我对新动作有疑问。
gametimes_controller.rb
def new
@gametime = GameTime.new
end
new.html.erb
<% form_for [:admin, @gametime ] do |f| %>
<% end %>
我收到此错误
NoMethodError at /admin/gametimes/new
undefined method `admin_game_times_path' for #<#<Class:0xae0d74c>:0xae0c2c0
Request parameters
{"action"=>"new", "controller"=>"admin/gametimes"}
路线显示此
new_admin_gametime GET /admin/gametimes/new(.:format) admin/gametimes#new
我不明白为什么它把路径当作“game_time”而不是“gametime”?
答案 0 :(得分:1)
您的模型名为GameTime
,大写字母为“G”和“T”。 form_for
将假定该路由为game_time
。
如果您希望默认路由为gametime
,则模型应命名为Gametime
- 即只有“G”大写。
内部form_for
使用ActiveModel::Name#param_key
来确定网址的这一部分,其中说明了您所看到的行为:
GameTime.model_name.param_key # => "game_time"
Gametime.model_name.param_key # => "gametime"
请注意模型中的文件名称game_time.rb
如何,因此存在一致性。