我的rails3应用程序中的控制器存在一些问题,称为nas
我的ruby应用已连接到现有数据库,因此表名必须保持为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'
我该如何解决这个问题?
由于
答案 0 :(得分:4)
这很令人困惑,因为我不知道“na”或“nas”是什么。从你的问题我的想法,你总是想把它称为“nas”,复数和单数。
如果是这种情况,那么答案就是将其放在config/initializers/inflections.rb
:
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable "nas"
end
这也会使您的Nas
模型默认使用nas
表,因此不需要set_table_name
。
但请注意,如果您不想使用Nas
作为控制器,则没有理由!您可以将它们命名为任何您喜欢的名称,只要这在routes.rb
中反映出来并且您在控制器中使用了正确的模型。
答案 1 :(得分:2)
猜测,也许你应该尝试重写命名约定,因为'nas'不是复数? (假设这就是s掉线的原因)
# Inflection rule
Inflector.inflections do |inflect|
inflect.irregular 'nas', 'nases'
end
environment.rb
中的
修改而不是environment.rb
使用:config/initializers/inflections.rb
(感谢Benoit Garret)
答案 2 :(得分:2)
我的ruby应用已连接到现有数据库,因此表名必须保持为nas。
那么为什么你的路线/控制器也必须命名为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 :waynes
答案 3 :(得分:0)
在您的routes.rb中,尝试
match '/nas', :to => 'na'