我做了一个资源。
resources :dashboards
我有一个包含表单的部分文件,我想使用这个部分(因为表单元素不会改变)来更新和创建。所以这就是我所拥有的:
控制器
class DashboardsController < ApplicationController
def new
@dashboard = Dashboard.new
end
end
看法
/dashboards/new.html.erb
<%= render :partial => "form", :locals => { :dashboard => @dashboard } %>
部分形式
/dashboards/_form.html.erb
<%= form_for(@dashboard) do |form| %>
.....
<% end %>
红宝石指南
红宝石指南指出:
Article 模型可供应用程序的用户直接使用,因此——遵循使用 Rails 开发的最佳实践——您应该将其声明为资源。在处理 RESTful 资源时,如果您依赖记录标识,对 form_for 的调用会变得非常容易。简而言之,您可以只传递模型实例并让 Rails 找出模型名称和其余部分。例如:
## Creating a new article
# long-style:
form_for(@article, :url => articles_path)
# same thing, short-style (record identification gets used):
form_for(@article)
## Editing an existing article
# long-style:
form_for(@article, :url => article_path(@article), :html => { :method => "put" })
# short-style:
form_for(@article)
结果
我以为我正确地遵循了 Rails 指南。因为我将@dashboard 设为资源。我可以将它传递到表单中并让它处理动作、方法和其余部分。相反,我得到了这个:
<form accept-charset="UTF-8" action="/dashboards" class="new_dashboard" id="new_dashboard_" method="post">
根据文档。我的表单的操作现在不应该是“/dashboards/new”,因为我们正在执行新操作吗?当我在 /edit 操作中使用相同的代码时,它是否应该传递一个额外的字段来声明要放置的方法?
无论如何,我的结果总是一样的。形式永远不会改变。
我究竟做错了什么?
编辑
这是我的路由器信息rake routes
GET /dashboards(.:format) dashboards#index
POST /dashboards(.:format) dashboards#create
GET /dashboards/new(.:format) dashboards#new
GET /dashboards/:id/edit(.:format) dashboards#edit
GET /dashboards/:id(.:format) dashboards#show
PUT /dashboards/:id(.:format) dashboards#update
DELETE /dashboards/:id(.:format) dashboards#destroy