質問: デバイスでUserを作成しています。 <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> <%= devise_error_messages! %> <% f.email_field %> 等があります <% end %> 他に <%= form_for [@entrepreneur, @entrepreneur. comments.build] do |f| %> <%= image_tag current_user.image, height:40, width:40 %> <%= f.text_area :body ,size:"60x5" %> <% end %> <%= form_for @entrepreneur do |f| %> <%= f.label :タイトル %> <%= f.text_field :title ,size:"100×30" %> <%= f.label :詳細 %> <%= f.text_area :text ,size:"100×100" %> <%= f.label :画像 %> <%= f.file_field :image ,size:"50×10" %> <%= f.submit :ideain %> <% end %> などのフォームがあるのですが これらを class User < ActiveRecord::Base mount_uploader :image, ImageUploader has_many :entrepreneurs has_many :comments devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable コメントアウト Include default devise modules. Others available are:コメントアウト コメントアウト :confirmable, :lockable, :timeoutable and :omniauthableコメントアウト end class Entrepreneur < ActiveRecord::Base mount_uploader :image, ImageUploader has_many :comments, dependent: :destroy belongs_to :user end class Comment < ActiveRecord::Base belongs_to :entrepreneur belongs_to :user end とやっています。 そこでこれらを関連させた上での記事一個一個に 個別のUserが投稿した内容を個人個人で表示したいのですが 現段階では ログインしたアカウントで 記事を作成し更新した表示になってしまいます 下記はshowページです <%= current_user.role %> <%= image_tag current_user.image, height:40, width:40 %> <% if user_signed_in? %> <%= current_user.role %> <%= current_user.name ? current_user.name : current_user.email %> <% end %> <%= comment.body %> のような感じです。 どのように記事を更新したUserを個別に分けていく表示をしたらいいか教えていただけたら幸いです!
回答: ちょっとやりたい事がわかりにくいのですが・・・ とりあえず、誰が投稿したかにかかわらず、全投稿を表示したいのだ、と解釈します。 外していたらすみません。 その上で、 1.投稿された記事を更新日時順にして表示 2.投稿された記事を投稿者別に表示 の2パターンが考えられるのですが、どっちなんでしょうか? 1.投稿された記事を更新日時順に表示 ``` # コントローラとアクションの名前はURL設計の問題なので、適切なものを考えてください # とりあえずHogeController#fugaとします # controller class HogeController < ApplicationController def fuga @entrepreneurs = Entrepreneur.ordeer('update_at DESC').all end end # view, hoge/fuga.html.erb <% @entrepreneurs.each do |ent| %> <%= ent.title %>....他のentrepreneurのコンテンツ表示 <%= ent.user.name %>...投稿の著者に関する表示 <% ent.comments.each do |com| %> <%= com.content %>...他のコメントの内容表示 <%= com.user.name %>...コメント著者の表示 <% end %> <% end %> ``` 2.投稿された記事を投稿者別に表示 ``` class HogeController < ApplicationController def fuga @users = user.all end end # view, hoge/fuga.html.erb <% users.each do |user| %> <%= user.name %>さんの投稿 <% user.entrepreneurs.order('update_at DESC').each do |ent| %> <%= ent.title %>....他のentrepreneurのコンテンツ表示 <% ent.comments.each do |com| %> <%= com.content %>...他のコメントの内容表示 <%= com.user.name %>...コメント著者の表示 <% end %> <% end %> <% end %> ``` こんな感じになるのではないかと思います。 わかりやすさ優先で書いているので、このままではN+1問題が発生しますが、 単純にHogeController#fugaで、 オブジェクトを取得する際にincludesオプションを使えばすむ話なので、 今回は割愛しています。