在Rails中add_index的正确方法是什么?

时间:2013-05-05 14:00:02

标签: ruby-on-rails-3

add_index :section_edits, ['admin_user_id', 'section_id' ]

add_index:sections,[:name,:page_id]

我知道变量是不同的,但我的问题是如何传递变量(即:page_id vs'page_id')。它有所作为吗?哪一个更好?

我注意到,当我使用:name时,它已经在我传递变量之前定义了,但是如果我使用'section_id',那么在教程之后,这个变量以前没有定义过。

以下是一些示例代码:

class CreateSections < ActiveRecord::Migration
  def change
    create_table :sections do |t|

      t.references :page
      t.string :name
      t.string :content_type
      t.integer :position
      t.boolean :visible
      t.text :content

      t.timestamps
    end
    add_index :sections, [:name, :page_id]
  end
end   

class CreateSectionEdits < ActiveRecord::Migration
  def change
    create_table :section_edits do |t|
      t.references :admin_user
      t.references :section

      t.timestamps
    end

    add_index :section_edits, ['admin_user_id', 'section_id' ]
  end
end

谢谢!

1 个答案:

答案 0 :(得分:1)

documentation for add_index将column_name(有问题的参数)描述为符号或符号数组,因此这些是正确的(因此更好)类型。其他参数类型产生相同结果的事实应该被视为不被依赖的实现副作用。 (通过遵循源代码,您可以看到字符串当前工作的原因以及符号。)

我不确定你之前定义的:name和'section_id'变量是什么意思,因为:name是一个符号,'section_id'是一个字符串文字,两者都不能用作变量。如果您指的是变量 name section_id ,它们与相应的符号和字符串无关,因此它们是定义的还是未定义的是无关紧要的。

不要因为上述答案而挑剔,但你要问的具体细节,我只是想弄清楚。 : - )