我正在尝试学习rails Active Record。
据悉,setRetainInstance(true)
可用于重命名rails创建默认值的表。
self.table_name
但是当我第一次运行迁移时,我仍然得到class Order < ActiveRecord::Base
self.table_name = "ordered"
end
表,而不是我在字符串中提到的表。在这里犯了什么错误?
迁移:
orders
答案 0 :(得分:1)
class CreateOrders < ActiveRecord::Migration
def change
create_table :ordered do |t|
t.timestamps null: false
end
end
end
这将创建一个ordered
表。
如果您已经拥有orders
表,则可以使用以下内容:
$ rails g migration ChangeOrdersToOrdered
#db/migrate/change_orders_to_ordered_______.rb
class ChangeOrdersToOrdered < ActiveRecord::Migration
rename_name :orders, :ordered
end
$ rake db:migrate
表格!=类
您必须记住迁移与类不同 - 它们是互斥的。
虽然命名约定相似,并且Rails在连接两者方面做得很好,但事实仍然是你可以随意调用你的表 - 它与你的模型无关除非您专门指定与模型相关联的表格。
设置self.table_name
仅设置模型将读取的类(它是class method):
根据直接从ActiveRecord :: Base递减的继承层次结构中的类名称,猜测表名(强制小写)。因此,如果层次结构如下:
中添加新的变形Reply < Message < ActiveRecord::Base
,则Message
用于猜测表名,即使在回复时调用也是如此。用于进行猜测的规则由Active Support
中的Inflector类处理,该类知道几乎所有常见的英语变形。您可以在config/initializers/inflections.rb
。
这意味着无论您在self.table_name
中提到什么,您都可以使用您想要的任何迁移。