这段代码有什么作用?我不懂语法

时间:2014-04-27 03:44:57

标签: ruby-on-rails ruby database-migration

我正在通过One Month Rails工作,我对以下代码行感到困惑

rails generate migration add_user_id_to_pins user_id:integer:index

代码在db:

中的migrate文件夹中生成此文件
class AddUserIdToPins < ActiveRecord::Migration
  def change
    add_column :pins, :user_id, :integer
    add_column :pins, :index
  end
end

我不小心输入了

rails generate migration add_user_id_to_pins user_id:integer index:integer

只是因为我假设语法是&#34;变量名&#34;:&#34;变量名的类型&#34;

并且我的命令生成了以下迁移文件:

class AddUserIdToPins < ActiveRecord::Migration
  def change
    add_column :pins, :user_id, :integer
    add_column :pins, :index, :integer
  end
end

有人可以解释一下语法,以及为什么我的代码中的两行都有符号整数,而不是第一个命令生成的代码的第一行,并且还解释了继续使用我的代码与示例。

2 个答案:

答案 0 :(得分:1)

再次检查您的迁移文件。第二行应该是add_index而不是add_coumn。

来自doc

如果您想在新列上添加索引,也可以这样做:

$ rails generate migration AddPartNumberToProducts part_number:string:index

将生成

class AddPartNumberToProducts < ActiveRecord::Migration
  def change
    add_column :products, :part_number, :string
    add_index :products, :part_number
  end
end

答案 1 :(得分:1)

rails生成迁移add_user_id_to_pins user_id:integer:index

这表示您有PIN模型,并且您想要将名为user_id的额外属性添加到引脚。

我认为你和pin之间有关系。喜欢 任

user has_many pins
pin belongs_to user

user has_one pin
pin belongs_to user

运行迁移的正确命令是

rails g migration add_user_id_to_pins user_id:integer

user_id : field name
Integer : Type that you assigned to user_id.

仅存储用户的ID。

def change
  add_column :pins, :user_id, :integer
end

您可以在迁移文件中看到这一点。

你添加索引错误的方式。 就像你可以手动添加索引一样。生成后的迁移文件转到该迁移并添加

  add_index :pins, :user_id

对于ActiveRecord迁移:http://guides.rubyonrails.org/migrations.html 对于Index In rails,请参阅:https://tomafro.net/2009/08/using-indexes-in-rails-index-your-associations

希望您能理解什么是迁移以及什么/为什么索引。