如何向模型添加属性?

44

在 Rails 中,我生成了一个包含两个字符串的模型,并希望添加更多内容。我该如何操作?


你需要进行迁移。http://guides.rubyonrails.org/migrations.html#creating-a-migration - dexter
那么只需将字符串添加到迁移中,然后运行rake db:migrate命令? - jsttn
4个回答

54

是的,@JCorcuera提供的解决方案可行,但我建议在Rails中添加更多信息以满足我们的要求。 尝试这种方法:

rails generate migration add_columnname_to_tablename columnname:datatype
例如:
rails generate migration add_password_to_users password:string

这绝对是一种更好的方法,只要确保你把名称写得完全正确,它就能正常工作。 - HussienK
"你必须准确地命名才能使其正常工作。" 我想补充一点,add_columnname_to_tablename 有意义,需要讲究。这似乎很明显,但我来自另一个迁移工具,那里迁移名称从未相关过,所以我没有立刻想到这一点。 - Sarumanatee

47

Active Record将您的表列映射到模型中的属性,因此您不需要告诉Rails您需要更多内容,您需要做的是创建更多的列,然后Rails会检测到它们,属性将自动添加。

您可以通过迁移向您的表添加更多列:

rails generate migration AddNewColumnToMyTable column_name:column_type(string by default)

示例:

rails generate migration AddDataToPosts views:integer clicks:integer last_reviewed_at:datetime 

这将生成一个文件:

db/2017.....rb

打开它并根据需要进行修改:

self.up
  #add_column :tablename, :column_name, :column_type
  add_column :posts, views, :integer
  add_column :posts, clicks, :integer, default: 0
end
希望这有所帮助。

假设我创建了一个Rails应用程序,并有一个名为User_credential的模型。目前它具有名称和电话号码。部署后,老板突然意识到他想要向模型添加地址。他要求我创建一个表单,以向模型添加属性。在Rails中是否可能实现这一点? - BenKoshy
@BKSpurgeon 的一个选项是使用序列化字段并将自定义属性存储在其中。另外,可以查看 http://api.rubyonrails.org/classes/ActiveRecord/Store.html,它可以让您像处理常规属性一样处理自定义属性。 - JCorcuera

2

如果您正在使用Rails 4.x,现在可以生成包含引用的迁移,就像这样:

rails generate migration AddUserRefToProducts user:references

如您所见,在rails指南中有介绍。


2

为了让它更容易理解,您可以这样做:

rails g migration add_something_to_model something:string something_else:integer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接