使用has_many后,不会创建关联

时间:2012-02-16 04:11:14

标签: ruby-on-rails activerecord

class User < ActiveRecord::Base
    has_many :microposts
end

class Mircopost < ActiveRecord::Base
    belongs_to :user
end

ActiveRecord::Schema.define(:version => 20120216035330) do

  create_table "mircoposts", :force => true do |t|
    t.integer  "user_id"
    t.string   "content"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "users", :force => true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

end

我运行rake db:migrate,rails console并创建一个假用户= User.create(:name =&gt;“abc”)。但是,当我运行user.microposts.empty时,它会产生“NameError:uninitialized constant User :: Micropost”。所以我不明白为什么这些方法是自动生成的。 提前谢谢!

3 个答案:

答案 0 :(得分:1)

has_many :microposts
class Mircopost < ActiveRecord::Base

答案 1 :(得分:1)

你想要create_table“microposts”

不是

create_table“mircoposts”

然后

user.microposts

将存在

答案 2 :(得分:1)

我遇到了另一个原因。我有一个名为“MicroPost”的脚手架,因此rails创建了一个名为micro_post.rb的模型,schema.rb文件创建了一个名为“micro_posts”的表。我不得不使用“has_many:micro_posts”而不是“has_many:micro_posts”,然后在控制台中使用“first_user.micro_posts”。由于第二个大写字母,Rails(或Ruby,不确定哪个)自动神奇地插入下划线。