質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.06%

rails has_many belongs_to 関連付け

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 937

m.kata

score 17

デバイスで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 %><br>

<%= f.text_area :body ,size:"60x5" %><br>

<% end %>

<%= form_for @entrepreneur do |f| %>
<br>
<%= f.label :タイトル %><br />
<%= f.text_field :title ,size:"100×30" %><br />
<%= f.label :詳細 %><br />
<%= f.text_area :text ,size:"100×100" %><br />
<%= f.label :画像 %><br />
<%= f.file_field :image ,size:"50×10" %><br />
<%= 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ページです

<li class="s-comment"> 
<div class="plofile"> 
<%= current_user.role %>
<div class="user-name">

<%= 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 %>

</div>
</div>
<%= comment.body %><br>
</li>

のような感じです。

どのように記事を更新したUserを個別に分けていく表示をしたらいいか教えていただけたら幸いです!

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

ちょっとやりたい事がわかりにくいのですが・・・

とりあえず、誰が投稿したかにかかわらず、全投稿を表示したいのだ、と解釈します。
外していたらすみません。

その上で、
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オプションを使えばすむ話なので、
今回は割愛しています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る