前提・実現したいこと
ここに質問の内容を詳しく書いてください。
プログラミング初心者で現在アウトプットを兼ねて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')
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/02 23:15
2020/03/03 01:27
2020/03/03 04:02