我的rails3应用程序中名为nas的控制器出现了一些问题。
我的ruby应用程序连接到一个现有的DB,因此表名必须保持为nas。
在我的模型中,我以前能够做到这一点:
set_table_name但我不知道如何在我的控制器/路由中做到这一点。
现在,我的路由包含以下内容:
resources :nas输出结果为:
new_na GET /nas/new(.:format) {:action=>"new", :controller=>"nas"}
edit_na GET /nas/:id/edit(.:format) {:action=>"edit", :controller=>"nas"}
na GET /nas/:id(.:format) {:action=>"show", :controller=>"nas"}
PUT /nas/:id(.:format) {:action=>"update", :controller=>"nas"}
DELETE /nas/:id(.:format) {:action=>"destroy", :controller=>"nas"}如您所见,rails去掉了“s”
我该如何解决这个问题?
谢谢
发布于 2011-10-07 21:32:23
这很让人困惑,因为我不知道什么是"na“或"nas”。从你的问题中我有一个想法,你总是想把它称为"nas",既有复数也有单数。
如果是这样,那么答案就是把它放在config/initializers/inflections.rb中
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable "nas"
end这也将使您的Nas模型在默认情况下使用nas表,因此不需要set_table_name。
但是,请注意,如果您不想为控制器使用Nas,则没有理由这样做!您可以随心所欲地为它们命名,只要这反映在routes.rb中,并且您在控制器中使用正确的模型。
发布于 2011-10-07 21:24:48
我猜,也许你应该尝试覆盖命名约定,因为'nas‘不是复数?(假设这就是s下降的原因)
# Inflection rule
Inflector.inflections do |inflect|
inflect.irregular 'nas', 'nases'
end在environment.rb中
编辑:使用而不是environment.rb:config/initializers/inflections.rb (感谢Benoit Garret)
发布于 2011-10-07 21:30:31
我的ruby应用程序连接到一个现有的数据库,因此表名必须保持为
。
那么为什么您的路由/控制器也必须命名为nas?一旦你在你的模型级别修复了它,一切都会好起来的。
# model.rb
class WhateverILikeToCallMyModel
set_table_name "nas"
end
# controller.rb
class WaynesController << ApplicationController
# ...
def index
@items = WhateverILikeToCallMyModel.all
end
end
# routes.rb
resources :wayneshttps://stackoverflow.com/questions/7687686
复制相似问题