2011-02-14 68 views
16

场景:我们已经有了一个文档模型,我们要添加添加多个列在一个迁移

  • 公共
  • 私人

列或多列使用一次迁移。

从我迄今为止搜索和阅读的内容中,您只需编辑迁移文件即可。如果已经应用迁移,请回滚并再次迁移。

  1. 这是常见的最佳实践,还是有更好的方法?
  2. 如果这样做的话,那么迁移的适当命名是什么?
+12

这些都是非常可怕的变量名称,因为它们通常是关键字,所以几乎可以在任何编程语言中使用。 – 2012-10-24 17:59:10

回答

61

只有当该迁移是本地迁移并且尚未推送到任何存储库时,回滚迁移并重新编辑它才是安全的。编辑其他人应用的迁移可能会导致问题。

将列添加到现有的表最安全的方式就是创建一个新的迁移:如果您使用add_[column_names]_to_[model]命名约定

rails g migration add_public_and_private_to_document public:string private:string 

,轨道将制定出相应的表,创建一个要迁移。

有一个在这里阅读更多的信息:http://guides.rubyonrails.org/migrations.html

0

可以发出这样的命令:

轨摹迁移文档市民:字符串私营:字符串

2

@Cam方式是分辩..除了在运行迁移之后需要更新两件事情。

因此,让我们说我有一个现有的脚手架叫myapp,我想添加更多的领域,该脚手架。三件事情要完成。

的字段被添加有:

=>

1)rails g migration add_term_count_and_current_record_count_and_previous_record_count_to_myapp term_count:integer , current_record_count:integer , previous_record_count:integer

=>

2) Update views, example updating _form.html.rb 

我需要添加:

<div class="field"> 
    <%= f.label :current_record_count %><br> 
    <%= f.number_field :current_record_count%> 
    </div> 

<div class="field"> 
    <%= f.label :current_record_count %><br> 
    <%= f.number_field :previouse_record_count%> 
    </div> 

    <div class="field"> 
    <%= f.label :term_count %><br> 
    <%= f.number_field :terminations_count %> 
    </div> 

=>

3) Update Controller : 

新版本的rails具有所谓的强参数,以防止黑客传递任意列字段值。长话短说,用新的字段名称更新方法,否则你将看不到新的字段。

# Never trust parameters from the scary internet, only allow the white list through. 

def vendor_file_params 
    params.require(:vendor_file).permit(:name, :run_date, :term_count , 
    :current_record_count , :previous_record_count ,:comments) 
end 
end