每个项目可以有一个页面:
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单一资源