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

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

ただいまの
回答率

90.52%

  • Ruby on Rails

    7238questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

RoutingErrorを解決できません

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 142

begin1990

score 23

Twitterのような投稿に、コメントを付けようと考えています。

要は以下の写真のような感じです。
https://gyazo.com/5e6658669f1e8f0b7b8e03207e88a1ba

コメントしたら、トップページに戻るルートを希望しています。

そこで、試しに投稿した所、ルーティングエラーが発生しました。
https://gyazo.com/b20681ffcc8460fa71f3da47e87bdb2a

現在のコードは以下の通りです。
config/routes.rb

Rails.application.routes.draw do
  root to: 'toppages#index'

  get 'login', to: 'sessions#new'
  post 'login', to: 'sessions#create'
  delete 'logout', to: 'sessions#destroy'

  resources :users do
    member do
      get :followings
      get :followers
    end
    collection do
      get :search
    end
  end

  resources :posts, only: [:create, :destroy, :show] , shallow: true do
    resources :comments, only: [:create, :destroy]
  end

  resources :relationships, only: [:create, :destroy]
  get 'signup', to: 'users#new'
end

comments_controller.rbのcreate部分

class CommentsController < ApplicationController
  before_action :set_comment, only: [:create, :destroy]
  before_action :require_user_logged_in

  def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.new(comment_params)
    @comment.user_id = current_user.id
    #@comment = current_user.posts.comments.build(comment_params)
    #@comment = Comment.create(text: comment_params[:text], post_id: comment_params[:post_id], user_id: current_user.id)
    if @comment.save
      flash[:success] = "コメントしました。"
      #redirect_to "/posts/#{@comment.post.id}"
      redirect_back(fallback_location: root_path)
    else
      render 'toppages/index'
    end
  end
以下省略

viewは以下のとおりです。

<ul class="media-list">
  <% posts.each do |post| %>
    <% user = post.user %>
    <li class="media">
      <div class="media-left">
        <img class="media-object img-rounded" src="<%= gravatar_url(user, options = { size: 50 }) %>" alt="">
      </div>
      <div class="media-body">
        <div>
          <%= link_to user.name, user_path(user) %> <span class="text-muted">posted at <%= post.created_at %></span>
        </div>
        <div>
          <p><%= image_tag post.picture,:size =>"280x210" %></p>
          <p><%= post.content %></p>
          <% if @comments %>
            <% @comments.each do |comment| %>
            <div class="name2">投稿者:<%= link_to comment.user.username, "/users/#{comment.user_id}" %>&nbsp;&nbsp;投稿日時:<%= comment.created_at.strftime("%Y-%m-%d %H:%M:%S") %></div>
            <div class="name2"><%= comment.text %></div>
            <% end %>
          <% end %>
          <br/>
          <% if current_user %>
            <%= form_tag("/posts/#{@post.id}/comments", method: :post) do %>
            <textarea cols="30" name="text" placeholder="コメントする" rows="2"></textarea>
            <br/>
            <input type="submit" value="コメントの投稿">
            <% end %>
          <% end %>
        </div>
        <br/>
        <div>
          <% if current_user == post.user %>
            <%= link_to "削除", post, method: :delete, data: { confirm: "本当に削除してよろしいですか?" }, class: 'btn btn-danger btn-sm' %>
          <% end %>
        </div>
      </div>
    </li>
  <% end %>
  <%= paginate posts %>
</ul>

色々と試してみましたが、中々解決できませんでした。
解決方法をご教示していただけますでしょうか?

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • matsuo

    2018/01/17 23:53

    viewファイルも公開した方がよいと思います

    キャンセル

  • begin1990

    2018/01/18 00:04

    大変申し訳ございません。ただいま追加しました。

    キャンセル

  • matsuo

    2018/01/18 01:35

    ありがとうございました。

    キャンセル

回答 1

0

<%= form_tag("/posts/#{@post.id}/comments", method: :post) do %>
ではなく、

<%= form_tag(post_comments_path(@post.id), method: :post) do %>
でどうでしょうか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/18 20:36 編集

    回答ありがとうございます。
    今度は別の問題が発生してしまいました。
    「No route matches {:action=>"create", :controller=>"comments", :post_id=>nil} missing required keys: [:post_id]」と言うエラーです。
    今はそちらを解決している途中です。

    キャンセル

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

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

関連した質問

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

  • Ruby on Rails

    7238questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。