Ruby on rails 如何将表单用于多态关联
我试图在新的.html.erb页面上创建一个表单,它给了我一个未定义的方法“task\u presentations\u path”错误Ruby on rails 如何将表单用于多态关联,ruby-on-rails,forms,erb,polymorphic-associations,Ruby On Rails,Forms,Erb,Polymorphic Associations,我试图在新的.html.erb页面上创建一个表单,它给了我一个未定义的方法“task\u presentations\u path”错误 = form_tag [@task, Presentation.new] do |f| = f.label :summary = f.text_field :summary 任务控制器 def new @task = Task.new end 路线 resources :presentations do resour
= form_tag [@task, Presentation.new] do |f|
= f.label :summary
= f.text_field :summary
任务控制器
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
由于您的
任务
模型是演示文稿
的嵌套
资源,最初它应该仅在存在演示文稿
模型时才存在。所以
####### in the controller.
def new
@presentation = Presentation.find(params[:id])
@task = @presentation.tasks.new
end
###### in your view
= form_tag [@presentation,@task] do |f|
....
....
希望对您有所帮助。由于您的
任务
模型是演示文稿
的嵌套
资源,最初仅当存在演示文稿
模型时才应该存在。所以
####### in the controller.
def new
@presentation = Presentation.find(params[:id])
@task = @presentation.tasks.new
end
###### in your view
= form_tag [@presentation,@task] do |f|
....
....
希望有帮助。我将运行
bundle exec rake routes | grep task
并查看该路由的名称。看起来可能是演示任务路径,但我不确定您是否可以添加控制器和模型的更多信息?是的,我已更新。我将运行bundle exec rake routes | grep task
并查看该路由的名称。看起来可能是演示任务路径,但我不确定您是否可以添加控制器和模型的更多信息?是的,我已经更新了。是的,我确实尝试过。当我这样做时,我得到的错误是表单上未定义的方法“tasks\u path”更改表单参数…我已经更新了我的答案。作为演示文稿/任务…您需要先将演示文稿传递给表单,然后将任务传递给表单..检查我的答案。让我知道它是否有效:)。谢谢!:)它确实有效。然而,现在我得到的错误是在标签上,未定义的方法'label'表示nil:nilclass正如我所说,每个演示都有一个任务,因此,请验证演示文稿和任务都存在,然后检查它们的字段。您可以使用rails控制台快速检查模型及其列。如果对您有帮助,请接受答案。任务有一个名为摘要的字段,我不明白为什么它说它没有摘要字段,而实际上它是一个列。是的,我已经尝试过了。当我这样做时,我得到的错误是表单上未定义的方法“tasks\u path”更改表单参数…我已经更新了我的答案。作为演示文稿/任务…您需要先将演示文稿传递给表单,然后将任务传递给表单..检查我的答案。让我知道它是否有效:)。谢谢!:)它确实有效。然而,现在我得到的错误是在标签上,未定义的方法'label'表示nil:nilclass正如我所说,每个演示都有一个任务,因此,请验证演示文稿和任务都存在,然后检查它们的字段。您可以使用rails控制台快速检查模型及其列。如果对您有帮助,请接受答案。任务有一个名为摘要的字段,我不明白为什么它说它没有摘要字段,而实际上它是一列
####### in the controller.
def new
@presentation = Presentation.find(params[:id])
@task = @presentation.tasks.new
end
###### in your view
= form_tag [@presentation,@task] do |f|
....
....