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

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

ただいまの
回答率

89.96%

ブログ投稿機能で、自分が投稿したものを自身のプロフィール画面に表示させたい。

解決済

回答 1

投稿

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

piyo_tan

score 12

超初心者的内容ですが、よろしくおねがいいたします。
現在、個人で開発を行っております。
よく見られる、複数人が投稿できるブログ投稿機能です。

題名通りなのですが、
『index』ページには、今まで投稿した全ユーザーの投稿が表示され
自身のプロフィールページ『user』には、自身の過去の投稿、プロフィールなどが表示されます。
その際、自身のプロフィールページ『user』に自身の投稿を反映させる方法がわかりません。

models/user.rb

class User < ApplicationRecord
  validates :name, presence: true, length: { maximum: 30 }
  validates :email, presence: true, length: { maximum: 255 }, format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i },
  uniqueness: true
  has_secure_password
  validates :password, presence: true, length: { minimum: 6 }, allow_nil: true
  has_many :favorites, dependent: :destroy 
  has_many :stories, dependent: :destroy, through: :favorites
end

 models/story.rb

class Story < ApplicationRecord
  mount_uploader :image, ImageUploader
  belongs_to :user
  default_scope -> { order(created_at: :desc) }
  validates :user_id, presence: true
end


自身のプロフィール『user』と
ブログ機能『story』は
belogs_to :userと
has_many :storiesで関連付けています。

 controllers/stories_controller.rb

  before_action :set_story, only: [:show, :edit, :update, :destroy]

  def create
    @story = Story.new(story_params)
    @story.user_id = current_user.id
   # @story = current_user.stories.build(story_params)
    respond_to do |format|
      if @story.save
        format.html { redirect_to @story, notice: 'Story was successfully created.' }
        format.json { render :show, status: :created, location: @story }
      else
        format.html { render :new }
        format.json { render json: @story.errors, status: :unprocessable_entity }
      end
    end
  end


  private
   def set_story
      @story = Story.find(params[:id])
    end


    def story_params
      params.require(:story).permit(:title, :company_name, :image, :email, :telephone, :occupations, 
        :what, :glad, :please, :age, :human, :work, :day, :dayend, :memo, :present, :address,  )
    end
end

 controlles/users_controller.rb

 def show
    @user = User.find(params[:id])
  end

 views/users/show.html.erb

<table>
      <% @user.stories.each do |story| %>
        <tr><td><%= image_tag story.image.to_s %></td></tr>
          <tr><td><p class=" display-4 "><%= story.title %></p></td></tr>
          <tr><td><%= story.company_name %></td></tr>
          <tr><td><%= story.what %></td></tr>
          <tr><td> Posted <%= time_ago_in_words(story.created_at) %> ago.</td></tr>
          <td><%= link_to '詳細を見る', story %></td>
          <td><%= link_to '編集する', edit_story_path(story) %></td>
          <td><%= link_to '削除する', story, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      <% end %>
    </tbody>
  </table>

ユーザーとブログの関連付けがしっかりできていないのでしょうか?
このコードだと、プロフィール『user』ページに表示されません。

railsチュートリアル、Ruby on Rails5アプリケーションプログラミングを参考にしおります。

お時間がある時で構いませんので、アドバイスをいただけうと嬉しいです。
よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

  has_many :stories, dependent: :destroy, through: :favorites

storiesは中間テーブルfavoritesを介して関連付けされる要素、という意味なので

  has_many :favorites, dependent: :destroy 
  has_many :favorite_stories, through: :favorites, source: :story
  has_many :stories, dependent: :destroy

かな、と思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/09/27 17:02

    解決できました!ありがとうございました!

    キャンセル

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

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