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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

2108閲覧

(Rails)新規投稿が反映されない。& link_to URLエラーの解消

HSRRRJSJQP

総合スコア24

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/03/02 08:59

編集2020/03/02 11:00

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
プログラミング初心者で現在アウトプットを兼ねてRailsでメモアプリを作成中。
しかし、下記2点の問題が発生し2日間試行錯誤いたしましたが解決できず。
質問させて頂きます。
①新規投稿が反映されない。
・1件のみは投稿できたが2件目以降がデータベースに反映されない。
・エラー文は発生しない。
②アイコンをクリックすると編集や削除ができるようにLink_toでパスを指定し、
繋がるようにするもエラーが発生。

エラーメッセージ ActionController::UrlGenerationError in Posts#index showing /〜〜〜/app/views/posts/index.html.haml where line #55 raised: No route matches {:action=>"edit", :controller=>"posts", :id=>nil} missing required keys: [:id] ### 該当のソースコード =post.url %td = link_to '編集', edit_post_path(@post) , method: :get, class: 'edit-btn' do = icon('fas', 'user-edit',class:'icon') -# = link_to '編集', edit_post_path(@post), class: 'edit-btn' %td ```ここに言語名を入力 Ruby,Rails

試したこと

①新規投稿が反映されない。
(1)products_controller内のストロングパラメータの記述内容を確認。
mergeでidが取得できるように追記。
(2)モデル内のアソシエーションやバリテーションの記載内容に誤りがないか確認。
記載内容には誤りはないことを確認。
(3)createアクションの記載に@post.saveを追記してみるが改善せず。
(4)createアクションにbinding.pryすると情報は取得できている。
②アイコンにクリックし指定したページに飛ばす。
(1)エラー文から「postsコントローラーのeditアクションにidがないからマッチするルートがない。だからURLが生成できない。」ということを理解する。
(2)rails routesでpathの記載内容に誤りがないことを確認
(3)methodを指定し行き先を絞る内容でコードを記載するもエラー。
(4)viewは作成済みで、コントロール内で「@post = Post.find(params[:id])」と
インスタンス変数でidを取得しているのに何故Nilと言われているのかが理解できず。

補足情報(FW/ツールのバージョンなど)

Rails 5.0.7.2

ここにより詳細な情報を記載してください。
【routes.rb】
Rails.application.routes.draw do
devise_for :users
root 'posts#index'
resources :posts
end

【models/user.rb】
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :posts
end

【models/post】
class Post < ApplicationRecord
validates :id, :number, :title, :word, :content, :url, presence: true
belongs_to :user
end

【posts_contoroller】
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destory]

def index
@posts = Post.all
@post = Post.new
end

def new
@post = Post.new
end

def create
@post = Post.create(post_params)
@post.save
redirect_to :root
end

def destory
@post.destory
end

def edit
end

def update
@post.update(post_params)
redirect_to :root
end

def show
end

def set_post
@post = Post.find(params[:id])
end

private
def post_params
params.require(:post).permit(:id, :number, :title, :word, :content, :url).merge(id: current_user.id)
end
end

【views/post/index.html.haml】
・・・・
%td
=post.url
%td
= link_to '編集', edit_post_path(@post) , method: :get, class: 'edit-btn' do
= icon('fas', 'user-edit',class:'icon')

%td = link_to '削除', url ="#", method: :delete, class: 'delete-btn', data: { confirm: '本当に消しますか' } do = icon('fas', 'trash-alt',class:'icon')

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

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

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

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

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

guest

回答1

0

ベストアンサー

①新規投稿が反映されない。

正直よくわかりませんが、create!メソッドを用いる事で検証失敗時にエラーとなるので
わかりやすくなるかもしれません。

ruby

1def create 2 @post = Post.create!(post_params) 3 redirect_to :root 4end

②アイコンをクリックすると編集や削除ができるようにLink_toでパスを指定し、

繋がるようにするもエラーが発生。

edit_post_path(post)の間違いかと思います。

投稿2020/03/02 16:13

asm

総合スコア15147

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

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

HSRRRJSJQP

2020/03/02 23:15

asm様 回答ありがとうございます。 ①について ご指摘受けた箇所に追記したところ下記エラーが出たので コントローラーに原因があることに絞ることができました。 「エラー文」 ActiveRecord::RecordInvalid in PostsController#create バリデーションに失敗しました: Userを入力してください @post = Post.create!(post_params) ②について ご指摘を受ける前に「link_to edit_post_path(post)」と試し改善しました。 追記していなかったため余分にお時間取らせてしまい失礼いたしました。 1点疑問なのですが、controllerで@postにidを代入しているのに @postではエラー、postにしたらエラーにならない理由が理解ができておりません。 追加で恐縮ですが併せてご教授頂けないでしょうか。 ※@postにすると変わらずにActionController::UrlGenerationError in Posts#indexが表示されます。
asm

2020/03/03 01:27

> ① なるほど post_paramsのmergeしている部分が 誤: merge(id: current_user.id) 正: merge(user_id: current_user.id) だったのですね。 > ② @post = Post.new では、@postにはデータベースに保存されていない新規データが代入されます。 データベースに保存されていないのでidもなかったように記憶しています。
HSRRRJSJQP

2020/03/03 04:02

asm様 回答ありがとうございます。 ①で指摘を受けたmerge(user_id: current_user.id)について migrationファイルを確認したところ user_idが登録されていないことに気付きました???? そもそも登録していなかったのでデータが反映されていないという次第でした。 抜け漏れでおつきあいさせてしまい失礼いたしましたm(_ _)m ご指摘受けた内容を糧に勉強とアウトプットに励みます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問