2016-04-08 3 views
0

Ich habe die Modelle Event, Meeting, TaskList und TaskItem. TaskList befindet sich in einer polymorphen Beziehung zu Event und Meeting. TaskItem wird in Tasklist verschachtelt, wie weiter unten in meinen Routen gesehen:Umleiten von der nicht polymorphen Seite einer Beziehung

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 

Verfahren erstellen kann nicht zurück in die Ansicht von TaskItem Umleitung wegen der Art und Weise der Steuerung polymorphe Routen behandelt. Mit einem Fehler am load_listable Verfahren in der Steuerung TaskItem Zeige ist

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 

dies aufgrund der Anforderung nicht eine Klass, wie es aus der nicht polymorphen Seite der Beziehung gesendet wird. Der einzige Weg, um es zum Laufen zu bringen, ist do redirect_to: back, was nicht wünschenswert ist, da es nicht auf die task_item show Seite umleitet, da es in einem Teilmodal ist.

Also meine Frage ist im Grunde, wie kann ich es auf die task_item Show-Seite umleiten, wo die create-Methode aufgerufen wird oder überhaupt nicht umleiten?

+0

Haben Sie (@ task_list, @ task_item) '' versucht redirect_to task_list_task_item_path? – engineersmnky

+0

Ich tat, es hat funktioniert, aber es ist nicht die Seite, die ich darauf umleiten wollte. das bringt mich zum task_item Index, während ich möchte, dass es zu task_list show – Yoklan

+1

Okay dann vielleicht schreiben Sie Ihren Beitrag um ein bisschen klarer zu sein, da es scheint, dass Sie zurück zum 'TaskItem' nicht die' TaskList' verweisen möchten. Allerdings sollten Sie in der Lage sein, etwas wie 'redirect_to tasklist_path (@ tasklist.id, klass: @ tasklist.task_list_type) 'zu tun, indem Sie die Klasse als zusätzliche Variable in params übergeben. – engineersmnky

Antwort

1

Ich habe das Problem gelöst, ohne meine Routen redoing durch das Verfahren der folgenden erstellen zu ändern:

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 
Verwandte Themen