【问题标题】:Incorrect Pluralizing of Model in RailsRails 中模型的不正确复数
【发布时间】: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 世纪盎格鲁-撒克逊牛群的人来说都是很糟糕的。

标签: ruby-on-rails ruby-on-rails-3 controller migration inflection


【解决方案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”?
猜你喜欢
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多