0

我有一个带有管理命名空间和一个名为 Gametime 的模型的 rails 4 应用程序

namespace :admin do
  resources :gametimes
end

模型是 game_time.rb

class GameTime < ActiveRecord::Base
end

索引和显示操作工作正常。我对新操作有疑问。

gametimes_controller.rb

def new
  @gametime = GameTime.new
end

新的.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”?

4

1 回答 1

1

您的模型以GameTime大写“G”和“T”命名。form_for将假定它的路线是game_time.

如果您希望默认路由为gametime,则应命名模型Gametime- 即只有“G”大写。

在内部form_for用于ActiveModel::Name#param_key找出 URL 的那一部分,它说明了您所看到的行为:

GameTime.model_name.param_key # => "game_time"
Gametime.model_name.param_key # => "gametime"

注意你的模型文件是如何命名的game_time.rb,所以那里有一些一致性。

于 2013-09-04T09:58:10.920 回答