Rails 4 - 具有命名空间模型名称拆分路由名称的表单

时间:2013-09-04 09:50:29

标签: ruby-on-rails

我有一个带有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”?

1 个答案:

答案 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如何,因此存在一致性。