我正在尝试为cms创建管理员后端。
所以我有一个Site Model,一个SitesController和一个Admin:SitesController。
在/app/views/sites/show.html和/app/views/admin/sites/index.html,new.html等。
的routes.rb
namespace :admin do
resources :sites, :except => :show
end
match '/:slug' => 'sites#show'
修改
记录输出
Started POST "/admin/sites" for 127.0.0.1 at 2011-07-13 19:03:12 +0200
Processing by Admin::SitesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"8IVTjl6ewasDuBEN6OgczTSdRfxSRPLmPodkrbZEKB8=", "site"=>{"title"=>"Test", "content"=>"abc", "slug"=>"home"}, "commit"=>"Create Site"}
SQL (1.1ms) INSERT INTO "sites" ("content", "created_at", "slug", "title", "updated_at") VALUES (?, ?, ?, ?, ?) [["content", nil], ["created_at", Wed, 13 Jul 2011 17:03:12 UTC +00:00], ["slug", nil], ["title", nil], ["updated_at", Wed, 13 Jul 2011 17:03:12 UTC +00:00]]
Redirected to http://localhost:3000/admin/sites
Completed 302 Found in 12ms
Rails不会使用表单中的参数创建记录。有什么想法吗?
这些是方法和观点:
系统管理员/位点#新
def new
@site = Site.new
respond_to do |format|
format.html # new.html.erb
end
end
系统管理员/位点#创建
def创建 @site = Site.new(params [:site])
respond_to do |format|
if @site.save
format.html { redirect_to admin_sites_path, notice: 'Site was successfully created.' }
else
format.html { render action: "new" }
end
end
系统管理员/位点/ _form
<%= form_for([:admin, @site]) do |f| %>
<% if @site.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@site.errors.count, "error") %> prohibited this admin_site from being saved:</h2>
<ul>
<% @site.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="fields">
<%= f.label :title %><br/>
<%= f.text_field :title %>
</div>
<div class="fields">
<%= f.label :content %><br/>
<%= f.text_area :content %>
</div>
<div class="fields">
<%= f.label :slug %><br/>
<%= f.text_field :slug %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
答案 0 :(得分:4)
你应该redirect_to
[:admin, :sites]
索引页
<强> UPD 强>
<%= form_for(@site, :url => [:admin, @site]) do |f| %>
答案 1 :(得分:2)
运行rake routes
查看您的路线。
如果您使用了脚手架,您的Admin :: SitesController中可能会有redirect_to @site
和redirect_to sites_path
之类的代码。您需要通过并将其更改为适当的命名路由,例如redirect_to admin_site_path(@site)
和admin_sites_path
。
答案 2 :(得分:0)
您的创建表单应该像这样构建:
<%= form_for [:admin, @site] do |f| %>
// form fields go here
<% end %>
这将创建一个发布到Admin :: SitesController #crera 的表单,除非您的索引视图或控制器操作将@site
设置为现有记录而不是@site = Site.new
。如果您将@site
设置为现有记录,那么将form_for更改为PUT更改为更新操作,当您有form_for @site ...
而不是form_for [:admin, @site]
时,会将其发送到SitesController而不是Admin :: SitesController。您提供的错误看起来像是你犯了这两个错误。