我正在通过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
有人可以解释一下语法,以及为什么我的代码中的两行都有符号整数,而不是第一个命令生成的代码的第一行,并且还解释了继续使用我的代码与示例。
答案 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
希望您能理解什么是迁移以及什么/为什么索引。