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”。所以我不明白为什么这些方法是自动生成的。 提前谢谢!
答案 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,不确定哪个)自动神奇地插入下划线。