2017-02-12 46 views
1

我想在我的new.html.erb頁面上做一個窗體,它給了我一個未定義的方法`task_presentations_path'錯誤。如何使用表單與多態關聯

= form_tag [@task, Presentation.new] do |f| 
    = f.label :summary 
    = f.text_field :summary 

tasks_controller

def new 
    @task = Task.new 
end 

路線

resources :presentations do 
     resources :tasks 
    end 

任務模型

class Task < ApplicationRecord 
    belongs_to :taskable, polymorphic: true 
    has_one :task_type 
    has_one :task_status 
end 

演示模型

class Presentation < ApplicationRecord 
    has_many :tasks, as: :taskable 
end 

rake任務

  presentation_tasks GET  /presentations/:presentation_id/tasks(.:format)    tasks#index 
          POST  /presentations/:presentation_id/tasks(.:format)    tasks#create 
     new_presentation_task GET  /presentations/:presentation_id/tasks/new(.:format)   tasks#new 
     edit_presentation_task GET  /presentations/:presentation_id/tasks/:id/edit(.:format)  tasks#edit 
      presentation_task GET  /presentations/:presentation_id/tasks/:id(.:format)   tasks#show 
          PATCH /presentations/:presentation_id/tasks/:id(.:format)   tasks#update 
          PUT  /presentations/:presentation_id/tasks/:id(.:format)   tasks#update 
          DELETE /presentations/:presentation_id/tasks/:id(.:format)   tasks#destroy 
+0

我會運行'bundle exec rake routes | grep任務「並查看該路由被調用的內容。看起來像它可能是presentation_tasks_path,但我不確定 – mccalljt

+0

你可以添加控制器和模型的更多信息..? – Milind

+0

是的,我已更新。 – brandoncodes

回答

0

當你的task模型是一個presentation資源nested,當有presentation模型present.So應該只存在本來 ...

######in the controller. 

def new 
    @presentation = Presentation.find(params[:id) 
    @task = @presentation.tasks.new 
end 

#####in your view 
= form_tag [@presentation,@task] do |f| 
    .... 
    .... 

希望它有幫助:)

+0

是的,我已經試過了。當我這樣做,我得到的錯誤是未定義的方法'tasks_path'的形式 – brandoncodes

+0

更改窗體參數...我已經更新了我的答案。作爲演示文稿/任務...您需要先傳遞演示文稿,然後將任務傳遞給窗體..請檢查我的答案。讓我知道它是否工作:)。 – Milind

+0

謝謝! :)它確實有效。然而,現在我得到的錯誤是在標籤上,未定義的方法'label'爲零:NilClass – brandoncodes