Rails3控制器多个/单一路由

时间:2011-10-07 13:06:06

标签: ruby-on-rails ruby

我的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'

我该如何解决这个问题?

由于

4 个答案:

答案 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'