2017-10-25 7 views
0

更新 - 私は今問題を解決しました - 各コースアイテムの部分を作成し、メインリストビューからレンダリングしました。それが働いていたが、これは、繰り返しの投稿のように見えますが、私は同様の質問に対する解決策を適用しようとしたと、彼らがいない場合、それはUPDATE OF ENDListingsControllerの 'destroy'アクションが見つかりません

謝罪をしなかった理由のおかげで、すべてのあなたの助けのために、私は本当にわからないんだけど働いて、私は立ち往生している!どんな提案も歓迎されました。ありがとうございます。

問題 は、私が「一覧」モデルに属している「コース」モデルを持っています。コントローラーはデフ

class CoursesController < ApplicationController 

    before_action :authenticate_user!, except: [:show] 
    before_action :set_listing 
    before_action :set_course, except: [:index, :new, :create] 

    def destroy 
    @course = @listing.courses.find(params[:id]) 
    @course.destroy 
    flash[:notice] = "Course deleted!" 
    redirect_back(fallback_location: request.referer) 
    end 

    private 

    def set_course 
    @listing = Listing.find(params[:listing_id]) 
    @course = Course.find(params[:id]) 
    end 

    def set_listing 
    @listing = Listing.find(params[:listing_id]) 
    end 

    def course_params 
    params.require(:course).permit(:name, :curriculum_type, :summary, :address, :course_places, :start_date, :finish_date, :price) 
    end 

end 

詳細を破壊するコースのリストすなわち "/リスト/ 2 /コース" に属するページ上で作成され、削除され

エラーメッセージ

No route matches [DELETE] "/listings/2/courses" 

コースリスティング/リスティングID /コースページの詳細

デフォルトで
<%= @listing.courses.each do |f| %> 
    <div class="jumbotron"> 
    <ul> 
    <li>Name = <%= f.name %></li> 
    <li>Type of course = <%= f.curriculum_type %></li> 
    <li>Number of places = <%= f.course_places %></li> 
    <li>Start Date = <%= f.start_date %></li> 
    <li>Finish Date = <%= f.finish_date %></li> 
    <li>Price (£) = <%= f.price %></li> 
    <%= link_to "Delete Course", listing_courses_path(@listing, @course), method: :delete %> 
    </ul> 
    </div> 
<% end %> 

routes.rbを詳細

resources :users, only: [:show] 
    resources :listings, except: [:edit] do 
    member do 
     get 'listing' 
     get 'pricing' 
     get 'description' 
     get 'photo_upload' 
     get 'amenities' 
     get 'location' 
     get 'courses' 
    end 
     resources :courses, except: [:edit] do 
      member do 
      get 'listing' 
      get 'pricing' 
      get 'description' 
      get 'photo_upload' 
      get 'amenities' 
      get 'location' 
     end 
    end 
    end 
+0

私の解決策を確認してください – krishnar

+0

缶あなたはroutes.rbの関連部分を含めますか? – hoffm

+0

@hoffm確かに私は上にそれを含めるように編集しました –

答えて

0

それがメンバールートのように、destroy方法は、IDを期待。あなたはIDなしでlisting/listingID/coursesルートを使用しています。このanswerで説明したように

resource :courses do 
: 
end 

またはdestroycollectionルートそれほどのように行います:

resources :courses, except: [:edit] do 
    delete :destroy, on: :collection 
    : 
    rest... 
end 

てみてくださいと見ているために、あなたは次のようlistingおよび/またはcoursesなど特異なリソース(read this)を定義する必要がありますこれが動作すれば。あなたは、各@listing.coursesを反復処理し、とにかくあなたが@listingのすべてcoursesを破壊しているcourses#destroyを呼び出しているようちなみに

が、これは少し冗長になります。だから、最初に@listing.courses.eachをなぜするのですか? listing#destroy_coursesメソッドを使用するか、@listing.courses.eachの繰り返しを削除する必要があります。

+0

私はそれを "リソース: [:edit] do delete::destroy、on::collection member do ....... "しかし、私は構文がわからない、その次のエラーを投げる:"構文エラー、予期しない ": '、expecting keyword_end delete::destroy、on::collection^" –

+0

削除後に': 'を削除してください。 – dARKaRK1002

+0

私は今それを解決しました。ページの上部にありますように、あなたの努力のおかげで –

1
<%= link_to listing_course_path(@listing,f), :method => :delete, :data => { :confirm => 'Are you sure?' } %> 

またはlisting_course_pathへのlink_toに

<%= link_to listing_course_path(@listing,id: f.try(:id)), :method => :delete, :data => { :confirm => 'Are you sure?' } %> 

route.rb

resources :listings do 
     resources :courses 
end 
+0

私は今解決しました。ページの上部にありますように、あなたの努力のおかげで –

0

更新パスを試みる(@listing、@course)listing_courses_pathから(@listing、@course)

<%= link_to "Delete Course", listing_course_path(@listing, f), method: :delete %> 
+0

ありがとう、私はそれを試みました。 'id' = 2 [WHERE "courses"。 "listing_id" = $ 1] "とdefで最初の行のエラーを指摘してください。 –

+0

@ShahzadTariqどこから来ていますか? – krishnar

+0

実際に彼は@courseに変数fを使用しました –

関連する問題