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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

1回答

1999閲覧

『form_withのmodel指定でのNoMethodErrorで困っています』

osuzumaru

総合スコア9

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2020/05/03 18:03

編集2020/05/03 18:29

https://gyazo.com/18a1aaa85ee74659c870020ec644a051
NoMethodErrorにより先な進めない状況です。
現在、投稿機能とログイン実装を行い、コメントテーブルを作成してshow画面にて投稿内容とコメントを表示させようとしている段階です。
ユーザーがログインしている場合にはフォーム画面を載せ、していない場合には、載せないをするところでcommentsが定義されていないというエラーが出ました。
エラー内容は理解しているのですが原因がわからないためご回答いただけると幸いです。

haml

1- if current_user 2 = form_with model: [@post, @comment], local: true do |form| 3 = form.text_area :text, placeholder: "コメントする", rows: "2" 4 = form.submit "SEND" 5 - else 6 %strong 7 %p ※※※ コメントの投稿には新規登録/ログインが必要です ※※※ 8 9 =link_to 'トップページ', root_path

rails

1class PostsController < ApplicationController 2 before_action :set_post, only:[:edit,:show] 3 before_action :move_to_index, except: [:index, :show] 4 def index 5 @posts = Post.includes(:user).order("created_at DESC") 6 end 7 def new 8 @post = Post.new 9 end 10 def create 11 Post.create(post_params) 12 end 13 def destroy 14 post=Post.find(params[:id]) 15 post.destroy 16 end 17 def edit 18 end 19 def update 20 post = Post.find(params[:id]) 21 post.update(post_params) 22 end 23 def show 24 @comment=Comment.new 25 @comments = @tweet.comments.includes(:user) 26 end 27 28 private 29 def post_params 30 params.require(:post).permit(:name,:image,:text).merge(user_id: current_user.id) 31 end 32 def set_post 33 @post=Post.find(params[:id]) 34 end 35 def move_to_index 36 redirect_to action: :index unless user_signed_in? 37 end 38end 39

rails

1class CommentsController < ApplicationController 2 def create 3 comment = Comment.create(comment_params) 4 redirect_to "/tweets/#{comment.tweet.id}" 5 end 6 7 private 8 def comment_params 9 params.require(:comment).permit(:text).merge(user_id: current_user.id, tweet_id: params[:tweet_id]) 10 end 11end

rails

1Rails.application.routes.draw do 2 devise_for :users 3 root "posts#index" 4 resources :posts do 5 resources :comments, only: :create 6 end 7 resources :users, only: :show 8end

rails

1class Post < ApplicationRecord 2 belongs_to :user 3 has_many :comments 4end

rails

1class Comment < ApplicationRecord 2 belongs_to :post 3 belongs_to :user 4end

初歩的な質問かとは思いますがよろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

commentsがNoMethodということなので、アソシエーション周りを確認してみるといいかもしれません。
Post modelとComment modelの内容も見せていただいても、よろしいでしょうか。

投稿2020/05/03 18:18

fshun

総合スコア261

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

osuzumaru

2020/05/03 18:22

```rails class Post < ApplicationRecord belongs_to :user has_many :comments end ``` ```rails class Comment < ApplicationRecord belongs_to :post belongs_to :user end ``` ご返信ありがとうございます! このようになっております。
fshun

2020/05/03 18:25

`@tweet.comments.includes(:user)` となっているので、 `@post.comments.includes(:user)` と修正を行ってみては、どうでしょうか。
osuzumaru

2020/05/03 18:37

気をつけます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問