0

私はレールに比較的慣れていないので、ユーザーと投稿を関連付けるという最も簡単なことをしています。私はこれを読みましたが、それを機能させるためにこれ以上何をする必要がありますか (またはこれだけですか?):

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

class Post < ActiveRecord::Base
  belongs_to :user
end

更新: 私はそれを機能させることができません。サインインしているユーザーで投稿すると@user.posts.any?、コンソールで投稿すると false になります。私のコード:

post.rb

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

user.rb (devise を使用)

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

posts テーブルを作成する移行には、必ずユーザーの 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", .....)

次に、これらの 2 つの方法のいずれかで投稿を追加します (他に 2 つあります)。

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 に答える