前提・実現したいこと
初歩的な質問で恐縮です。
railsチュートリアルのサンプルアプリにて投稿した文章を編集できる機能を実装しようとしています。
編集画面のビューを用意し、editアクションをコントローラに記載して、link_toメソッドでedit_micropost_pathを使って編集画面に飛ばそうとしています。
ですが現在編集のリンク自体は投稿のフィードに正常に表示されますが、そのリンクをクリックして飛ぼうとしたところで下記のエラーが発生します。
発生している問題・エラーメッセージ
下記のように、micropostのidを取得できないと怒られこけております。
ActiveRecord::RecordNotFound in MicropostsController#edit Couldn't find Micropost without an ID
該当のソースコード
_micropost.html.erb
ruby
1<li id="micropost-<%= micropost.id %>"> 2 <%= link_to gravatar_for(micropost.user, size: 50), micropost.user %> 3 <span class="user"><%= link_to micropost.user.name, micropost.user %></span><br> 4 <span class="title"><strong><%= micropost.title %></span></strong><br> 5 <span class="content"> 6 <%= micropost.text %><br> 7 <%= image_tag micropost.picture.url if micropost.picture? %><br> 8 <%= micropost.tag %><br> 9 </span> 10 <span class="timestamp"> 11 Posted <%= time_ago_in_words(micropost.created_at) %> ago. 12 <% if current_user?(micropost.user) %> 13 <%= link_to "編集" , edit_micropost_path(:id) %> 14 15 <%= link_to "削除", micropost, method: :delete, 16 data: { confirm: "You sure?" } %> 17 <% end %> 18 </span> 19 <%= render "likes/like", micropost: micropost %> 20 <%= render "joins/join", micropost: micropost %> 21</li>
edit.html.erb
<% provide(:title, "Edit micropost") %> <h1>プロジェクトを編集する</h1> <div class="row"> <div class="col-md-6 col-md-offset-3"> <%= form_for(@micropost) do |f| %> <%= render 'shared/error_messages' %> <%= f.label :title %> <%= f.text_field :title, class: 'form-control' %> <%= f.label :text %> <%= f.text_field :text, class: 'form-control' %> <%= f.label :tag %> <%= f.text_field :tag ,class: 'form-control' %> <%= f.submit "変更を保存する", class: "btn btn-primary" %> <% end %> <div class="gravatar_edit"> <%= gravatar_for @user %> <a href="http://gravatar.com/emails" target="_blank">変更</a> </div> </div> </div>
miropost_controller.rb
class MicropostsController < ApplicationController before_action :logged_in_user, only: [:create, :destroy] before_action :correct_user, only: :destroy def index @search_microposts = Micropost.search(params[:search]) end def readyfor @micropost = current_user.microposts.build if logged_in? end def create @micropost = current_user.microposts.build(micropost_params) if logged_in? if @micropost.save flash[:success] = "Micropost created!" redirect_to root_url else @feed_items = current_user.feed.paginate(page: params[:page]) render 'static_pages/home' end end def destroy @micropost.destroy flash[:success] = "Micropost deleted" redirect_to request.referrer || root_url end def edit @micropost = Micropost.find(params[:micropost_id]) end def update @micropost = Micropost.find(params[:id]) if @micropost.update_attributes(micropost_params) #実装中の部分 else render 'edit' end end private def micropost_params params.require(:micropost).permit(:text, :tag, :title) end def correct_user @micropost = current_user.microposts.find_by(id: params[:id]) redirect_to root_url if @micropost.nil? end end
routes.rb
Rails.application.routes.draw do get 'joins/create' get 'joins/destroy' get 'likes/create' get 'likes/destroy' get 'password_resets/new' get 'password_resets/edit' get 'sessions/new' root "static_pages#home" get "/readyfor", to: "microposts#readyfor" post "/readyfor", to: "microposts#create" get '/about', to: 'static_pages#about' get "/discover", to: "static_pages#discover" get '/signup', to: 'users#new' post '/signup', to: 'users#create' get '/login', to: 'sessions#new' post '/login', to: 'sessions#create' delete '/logout', to: 'sessions#destroy' resources :users do member do # /users/:id/~ get :following, :followers # GET /users/1/following => following action # GET /users/1/followers => followers action end end resources :account_activations, only: [:edit] resources :password_resets, only: [:new, :create, :edit, :update] resources :microposts resources :relationships, only: [:create, :destroy] resources :likes, only: [:create, :destroy] resources :joins, only: [:create, :destroy] end
試したこと
当初はedit_micropost_pathに引数でidを渡しておらず、リクエストのなかの投稿のidがnilだと怒られていました。パスに与えるidやコントローラのeditアクションの引数のidなどの表記を変えたりしましたが、依然解決できません。
お力をお貸しいただけると幸いです、、!
補足情報(FW/ツールのバージョンなど)
ruby 2.4.1
ruby on rails 5.1.4
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/07 09:00
退会済みユーザー
2018/07/09 08:36