一对多的关系:很多人没有出现的名单

时间:2013-06-08 18:06:55

标签: ruby-on-rails database

我有一个简单的一对多关系映射用户到帖子。以下是架构的相关部分:

create_table "users", :force => true do |t|
    t.string   "username"
    t.string   "first_name"
    t.string   "last_name"
    t.string   "email"
    t.string   "password"
    t.string   "status",     :default => "User"
    t.string   "img_url"
    t.text     "bio"
    t.integer  "num_posts",  :default => 0
    t.datetime "created_at",                     :null => false
    t.datetime "updated_at",                     :null => false
  end

  create_table "posts", :force => true do |t|
    t.string   "subject"
    t.text     "body"
    t.integer  "user_id"
    t.integer  "section_id"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

以下是模特:

class User < ActiveRecord::Base
  attr_accessible :bio, :email, :first_name, :img_url, :last_name, :num_posts, :password, :status, :username
  has_many :posts
  has_many :comments
end

class Post < ActiveRecord::Base
  attr_accessible :body, :section_id, :subject, :tag_ids, :user_id
  belongs_to :user
  belongs_to :section
  has_and_belongs_to_many :tags
  has_many :comments
end

我进入rails控制台创建一个新用户做User.create(属性)和一个新帖子做Post.create(一些属性),分别将它们分配到p1和u1,然后我做p1.user = U1。

现在当我执行p1.user时,我得到一个u1对象。而且,我可以看到user_id键被设置为DB中u1的键。但是,当我执行u1.posts时,我得到一个空列表。如何获取属于给定用户的所有帖子的列表?

1 个答案:

答案 0 :(得分:1)

理想情况下,在创建帖子时,您可以这样创建:

user.posts.create!({attributes})

在您的情况下,这可能是association caching的问题。尝试

u1.reload.posts