0

我对 Rails 比较陌生,做最简单的事情:关联用户和帖子。我读了这个,但是我还需要做些什么才能让它工作(或者这是唯一的事情)?:

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
4

1 回答 1

0

您应该确保在创建帖子表的迁移中包含用户的 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
于 2013-03-25T10:02:31.710 回答