轨道上的 Ruby - 路由嵌套资源具有一种关系



每个项目可以有一个页面:

resources :project do
    resource :page
  end
  class Project < ActiveRecord::Base
    has_one :page
  end
  class Page < ActiveRecord::Base
    belongs_to :project
  end

  def new
    @project = Project.find(params[:project_id])
    @page = @project.build_page
      respond_to do |format|
        format.html
      end
    end
    def create
      @project = Project.find(params[:project_id])
      @page = @project.build_page(params[:page_id])
      respond_to do |format|
        if @page.save
          format.html { redirect_to @page, :notice => 'Page was successfully created.' }
        else
          format.html { render action: "new" }
        end
      end
    end

但是当我去保存页面时,我不仅收到路由错误,而且它实际上并没有保存到数据库中。

Routing Error
No route matches [POST] "/projects/2/pages"

我的表单操作如下所示:

<%= form_for([@job, @page]) do |f| %>

有谁知道发生了什么?我有点从其他 SO 帖子中将所有这些拼凑在一起,但是我在这里或那里更改一行的次数越多,我觉得我离工作解决方案越来越远。例如,如果我将表单操作更改为:

<%= form_for @page, url: job_page_path(@job) do |f| %>

一切都神奇地工作,但随后编辑操作仍然被破坏。我在屠宰什么基本概念?

谢谢!--马克

你有一个错别字:

 resource :page

应该是

 resources :page

(注意 S)

resource(单数)实际上是一种完全不同的方法,可以构建一组不同的路由。有关详细信息,请参阅文档。

更新/勘误表

对不起,我读你的问题太快了。 你应该看看Ruby on Rails:奇异资源和form_for - 似乎form_for不知道如何正确处理奇异资源。

SO上的某人建议快速解决此问题:嵌套form_for单一资源

最新更新