Rails:如何设置Active Record Associations?

时间:2013-03-25 09:53:55

标签: ruby-on-rails activerecord associations

我相对较新的rails并做最简单的事情:关联用户和帖子。我读了this,但是我需要做些什么来使它工作(或者这是唯一的事情)?:

class User < ActiveRecord::Base
  has_many :posts, :dependent => :destroy
end

class Post < ActiveRecord::Base
  belongs_to :user
end

更新 我不能让它发挥作用。当我使用已登录的用户发帖时,当我在控制台中@user.posts.any?时,我会收到错误。我的代码:

post.rb

class Post < ActiveRecord::Base
  attr_accessible :title, :user_id
  belongs_to :user
  before_create :default_values

user.rb(我使用设计)

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  attr_accessible :email, :password, :password_confirmation, :remember_me
  has_many :posts, dependent: :destroy
end

20130320162700_create_posts.rb

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.string :title
      t.integer :user_id

      t.timestamps
    end
  end
end

1 个答案:

答案 0 :(得分:0)

您应确保在创建posts表的迁移中包含User's id。 在您的迁移文件中(在db / migrate文件夹中,您将找到名为20130325105934_create_posts.rb的文件)

在文件中,您将找到迁移代码。沿着其他声明的属性添加

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
     ...... 
     t.integer :user_id
     ......
  end

让事情滚动就足够了: - )

在您的代码中,您可以创建一个新用户

@user = User.new(:login => "my_user", .....)

然后使用以下两种方式之一添加帖子(还有其他两种方式)。

post = Post.new(:title => "something", :text => "more of something", :user_id = @user.id)

   post = Post.new(:title => "something", :text => "more of something")
   @user.posts << post