@posts = Post.all
Post.all は、現在データベースにあるすべての投稿を、@posts というインスタンス変数に保存する Post レコードの配列として返します。ユーザーの特定のデータだけを取得したいのですが、どうすればいいですか?
@posts = Post.all
Post.all は、現在データベースにあるすべての投稿を、@posts というインスタンス変数に保存する Post レコードの配列として返します。ユーザーの特定のデータだけを取得したいのですが、どうすればいいですか?
結果をフィルタリングする場合は、「where」メソッドを使用できます。
たとえば、ユーザー名で投稿をフィルタリングするには、次のことを試してください。
@posts = Posts.where(:username => "jondoe")
'find'メソッドで:conditionsシンボルを使用して、この場合はSQLを渡すこともできます。
たとえば、ユーザー名と公開フラグでフィルタリングするには、次のことを試してください。
@posts = Posts.all(:conditions => "username='johndoe' AND public=1")
@posts = specific_user.posts.all
投稿モデルがユーザーモデルに属していること、およびユーザーモデルが多くの投稿を持っていることを確認する必要があります
まず、移行を生成する必要があります。
rails g migration add_user_id_to_posts user_id:integer
次に、 を実行rake db:migrate
して、posts
データベース テーブルにuser_id
列が含まれるようにします。
ここで、関連付けを反映するように変更user.rb
してモデル化する必要がありますpost.rb
# app/models/post.rb
class Post < ActiveRecord::Base
...
belongs_to :user
...
end
# app/models/user.rb
class User < ActiveRecord::Base
...
has_many :posts
...
end
この後、Rails サーバーを再起動します。これで、このようなユーザーに固有の投稿にアクセスできるようになります
# Let fetch User with ID 1
user = User.find(1)
# Now, we can fetch posts related to this user like
@posts = user.posts
# Or like this
@posts = Post.where(:user_id => 1).all
簡単にフォローできることを願っています。Rails ActiveRecord アソシエーションについて学びます。