Rails 中模型的不正确复数
Posted
技术标签:
【中文标题】Rails 中模型的不正确复数【英文标题】:Incorrect Pluralizing of Model in Rails 【发布时间】:2012-09-19 04:41:48 【问题描述】:我查看了 Stack Overflow 和使用 Rails 进行敏捷开发,但找不到任何可以回答我需要的所有部分的内容。
我刚刚在 rails 中生成了一个 Cow 模型。显然,Rails 使用了牛(“kine”)的过时复数形式,所以当我创建该模型时,它构建了一个 Kine 迁移:
class CreateKine < ActiveRecord::Migration
def change
create_table :kine do |t|
t.string :name
t.string :farm
t.string :breed
t.timestamps
end
end
end
我知道我可以进入模型的 .rb 文件并将 set_table_name 返回到 cow,但我担心关联的控制器。如果我创建一个 Cows 控制器,它不会同步吗?
如何让所有东西都变成牛/牛?谢谢。这是我的第一个应用程序之一,我已经对管理控制器模型关联感到困惑,所以这个变形问题没有帮助。
【问题讨论】:
这个相当神秘的不规则变形是removed from Rails a few days ago。未来的版本将正确地将cow
变形为cows
。
很高兴听到。虽然这对于所有想要编写 Rails 4 应用程序来优化 14 世纪盎格鲁-撒克逊牛群的人来说都是很糟糕的。
【参考方案1】:
这里是一个例子:
config>initializers>inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'cow', 'cows'
end
【讨论】:
太棒了。然后再次运行 rake db:migrate? 或者我应该回滚模型然后重新生成它? 这是正确的答案。 @Sasha,只需删除迁移并重新运行生成器;这次它应该生成Cows
。
@Sasha 只是销毁您生成的内容:rails destroy model Cow 然后在添加此答案中提到的代码后运行生成器【参考方案2】:
尝试重命名表:
class RenameKineToCows< ActiveRecord:Migration def up rename_table :kine, :cows end def down rename_table :cows, :kine end end
将您的 app/models/kine.rb 重命名为 cow.rb 并编辑文件
class Cow < ActiveRecord::Base self.table_name = 'Cow' end
将您的 app/controllers/kine_controller.rb 重命名为 cows_controller.rb 并编辑文件
class KineController < ApplicationController
到
class CowsController < ApplicationController
并编辑 config/routes.rb
resources :kine
到
resources :cows
【讨论】:
非常感谢!只是双重检查。在您编写的迁移中,self.up 和 self.down 应该相同吗?还是 self.down 应该是“rename_table :cows, :kine”?以上是关于Rails 中模型的不正确复数的主要内容,如果未能解决你的问题,请参考以下文章