2016-04-08 1 views
0

イベント、会議、タスクリスト、およびタスクアイテムのモデルがあります。 TaskListはEventおよびMeetingと多相関係にあります。たTaskItemは、以下の私のルートに見られるように、タスクリストにネストされている:関係の非多相側からのリダイレクト

concern :has_task_lists do 
    resources :task_lists, only: [:new, :index, :create, :show] 
    end 

    resources :events, concerns: :has_task_lists do 
    collection { post :import } 
    end 

    resources :meetings, concerns: :has_task_lists 

    resources :task_lists do 
    resources :task_items, only: [:new, :index, :create] do 
     member do 
     patch 'complete' 
     end 
    end 
    end 

作成する方法が原因で、コントローラは、多型のルートを処理する方法の背面たTaskItemのビューにリダイレクトすることができません。エラーがたTaskItemコントローラ

task_items_controller 

def create 
    @task_item = @task_list.task_items.new(task_item_params) 
    if @task_item.save 
    redirect_to @task_list, notice: "Item Created" 
    end 
end 

task_lists_controller 

def load_listable 
    klass = [Event, Meeting].detect { |c| params["#{c.name.underscore}_id"]} 
    @listable = klass.find(params["#{klass.name.underscore}_id"]) 
end 

にload_listable方法を指すとこれは関係のない多型側から送信されているとしてのklassを有していない要求のためです。私がそれを動作させる唯一の方法は、redirect_to:backを行うことです。これは、部分的なモーダルであるため、task_itemの表示ページにリダイレクトされないので望ましくありません。

私の質問は基本的には、どのようにcreateメソッドが呼び出されているか、まったくリダイレ​​クトされていないtask_item showページにリダイレクトすることができますか?

+0

あなたは ''(task_item @ @ task_list、)redirect_toのtask_list_task_item_pathを試みたことがありますか? – engineersmnky

+0

私はしました、それは働いていましたが、リダイレクトしたいページではありませんでした。それは私をtask_itemインデックスに持って行きますが、私はtask_listにルーティングしたいのですが、表示 – Yoklan

+1

あなたのポストを少し書き直してみましょう。タスクリストではなくTaskItemにリダイレクトしたいと思っているようです。それはparamsの追加変数としてクラスを渡すことによって、 'redirect_to tasklist_path(@ tasklist.id、klass:@ tasklist.task_list_type)'のようなことができるはずだと言われています。 – engineersmnky

答えて

1

私は次のように作成する方法を変更することで、私のルートを再実行せずに問題を解決しました:

def create 
     @task_item = @task_list.task_items.new(task_item_params) 
     if @task_item.save 
     klass = "/" + @task_list.listable_type.underscore + "s" 
     klass_id = "/" + @task_list.listable_id.to_s 
     redirect_to klass + klass_id + task_list_path(@task_list.id), notice: "Item Created" 
     else 
     redirect_to klass + klass_id + task_list_path(@task_list.id), alert: "Content can't be blank." 
     end 
    end 
関連する問題