这是我的故事:我刚才有类似的东西。
create_table(:users) do |t|
t.database_authenticatable :null => false
t.recoverable
t.rememberable
t.trackable
t.integer :total_pageviews
和“total_pageviews”工作正常。我可以将它设置为零,增加它,乘以它,调用它,无论如何。但是,我想说要添加:
t.integer :total_votes
如何将total_votes配置为属性?每当我尝试使用“total_votes”时,我都会得到未定义的方法错误。我认为答案类似于rake db:migrate
或类似的东西。
答案 0 :(得分:8)
您不应该改变现有的迁移。如果您已将它们签入到版本控制系统中,并且其他人运行它们,然后您向它们添加新字段并提交该更改,则他们将不知道要进行更改。然后你必须告诉他们,这是一个很难解决的问题。
如果您尚未提交,则回滚迁移(rake db:rollback
),进行必要的修改并重新运行(rake db:migrate
)。
但是在真实世界中,您将创建新迁移,使用rails g migration add_total_votes_to_users total_votes:integer
添加此字段。
Rails将解释此迁移名称,并知道如何处理它,生成包含此行的迁移:
add_column :users, :total_votes, :integer
然后,当您运行此迁移时,它会将此total_votes
字段添加到users
表中,该表将为所有User
个对象创建相同名称的属性。
答案 1 :(得分:2)
您是否在迁移完成后添加此内容?那么,users表存在并且您想要向其添加列?如果是这样,您需要创建像
这样的迁移rails generate migration add_total_votes_to_users
打开它(只是为了验证表和列是否正确)。然后运行迁移。
答案 2 :(得分:1)
如果您的应用正在投放,那么您应该创建一个新的迁移。如果您的应用程序处于预生产阶段,并且您有一个小型开发团队,并且有良好的沟通,那么我建议您继续修改迁移然后再进行
rake db:drop
rake db:create
rake db:migrate
然后您可以提交修改后的迁移文件,并让其他人知道您已更改迁移文件。