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

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

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

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

Q&A

解決済

1回答

702閲覧

rails saveが出来ず、Nomethoderrorがでた。

naru_asa

総合スコア1

Ruby on Rails

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

0グッド

0クリップ

投稿2021/10/27 08:37

前提・実現したいこと

rails初学者です。画像投稿サイトを制作しています。
画像投稿を作っている際にエラーメッセージが表示されました。
newページの投稿をする際にsaveメソッドでエラーがでました。
様々なサイトを参考に施行錯誤しましたが、解決できませんでした。
ご教授お願いします。

発生している問題・エラーメッセージ

NoMethodError in PostsController#create undefined method `post_id' for #<Post:0x00007fa6c24daa60> Extracted source (around line #23): 21 @post = Post.new(post_params) 22 @post.user_id = current_user.id 23 if @post.save 24  redirect_back(fallback_location: root_path) 25 else 26  redirect_to posts_path 27 end

該当のソースコード

class

1 2def index 3 @posts = Post.all 4 end 5 6 def new 7 @post = Post.new 8 end 9 10 def show 11 @post = Post.find(params[:id]) 12 @favorite = Favorite.new 13 end 14 15 def edit 16 17 end 18 19 def create 20 @post = Post.new(post_params) 21 @post.user_id = current_user.id 22 if @post.save 23 redirect_back(fallback_location: root_path) 24 else 25 redirect_to posts_path 26 end 27 end

html

1<div class="container px-6 px-sm-0"> 2 <center> 3 <div style="padding-top:10px;"> 4 <div class="col-5 col-sm-5"> 5 <h3>新規投稿</h3> 6 </div> 7 </div> 8 9 <%= form_with model: @post, local: true do |f| %> 10 <div class="field"> 11 <div style="padding-top:5px;"> 12 <div class="col-5 col-sm-5 text-left"> 13 <p>投稿画像</p> 14 <%= f.attachment_field :image %> 15 </div> 16 </div> 17 </div> 18 19 <div class="field"> 20 <div style="padding-top:10px;"> 21 <div class="col-5 col-sm-5"> 22 <%= f.text_area :contents, :size=>"30x3", placeholder:"内容を入力してください", class: "form-control" %> 23 </div> 24 </div> 25 </div> 26 27 <div class="field"> 28 <div style="padding-top:10px;"> 29 <div class="col-5 col-sm-5"> 30 <p class="text-left">タグ</p> 31 <%= f.text_field :tag_list, value: @post.tag_list.join(','), class: "form-control" %> 32 </div> 33 </div> 34 </div> 35 36 <div class="field"> 37 <div style="padding-top:10px;"> 38 <div class="col-5 col-sm-5 text-left"> 39 <p>撮影ポイント(例)羽田空港第2ターミナル展望デッキ</p> 40 <div class='map-btn'> 41 <%= f.text_field :address, class: "form-control" %> 42 <div> 43 </div> 44 </div> 45 </div> 46 47 <div class="field"> 48 <div style="padding-top:20px; padding-bottom:50px;"> 49 <div class="col-5 col-sm-5"> 50 <%= f.submit "投稿する", class: "btn btn-success sign-btn" %> 51 </div> 52 </div> 53 </div> 54 55 56 57 <% end %> 58 59 </center> 60 61</div>

post.rb

1class Post < ApplicationRecord 2 acts_as_taggable 3 belongs_to :user 4 attachment :image 5 has_many :post_comments, dependent: :destroy 6 has_many :favorites, dependent: :destroy 7 has_many :favorited_users, through: :favorites, source: :user 8 validates_uniqueness_of :post_id, scope: :user_id 9 geocoded_by :address 10 after_validation :geocode, if: :address_changed? 11 def favorited_by?(user) 12 favorites.where(user_id: user.id).exists? 13 end 14end 15
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :posts, dependent: :destroy has_many :post_comments, dependent: :destroy has_many :favorites, dependent: :destroy has_many :favorited_posts, through: :favorites, source: :post def already_favorited?(post) self.favorites.exists?(post_id: post.id) end end

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

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

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

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

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

guest

回答1

0

ベストアンサー

Postモデルでvalidates_uniqueness_ofのフィールドをpost_idにしてるのが原因ではないでしょうか?
勝手な憶測ですがPostテーブルにpost_idはないはずなので。

投稿2021/10/27 08:46

S.Hashimoto

総合スコア65

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

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

naru_asa

2021/10/27 09:05

回答ありがとうございます! "validates_uniqueness_of"が無くでも無事に投稿できました。また、いいねも機能できた状態で解決出来たので良かったです。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問