Ruby on rails Rails 3管理命名空间

Ruby on rails Rails 3管理命名空间,ruby-on-rails,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3.1,我正在尝试为cms创建一个管理后端 所以我有一个站点模型,一个SitesController和一个Admin:SitesController In/app/views/sites/show.html和In/app/views/admin/sites/index.html、new.html等 routes.rb namespace :admin do resources :sites, :except => :show end match '/:slug' =>

我正在尝试为cms创建一个管理后端

所以我有一个站点模型,一个SitesController和一个Admin:SitesController

In/app/views/sites/show.html和In/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(参数[:site])

管理员/网站/\u表单

<%= 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 %>

禁止保存此管理员站点:




您应该将\u重定向到

 [:admin, :sites]
用于索引页

UPD

<%= form_for(@site, :url => [:admin, @site]) do |f| %>
[:admin,@site])do | f |%>

运行
rake routes
查看您的路线


如果您使用脚手架,您的Admin::SitesController中可能有类似于
重定向到@site
重定向到sites\u路径的代码。您需要遍历并将其更改为适当的命名路由,例如,
重定向到admin\u site\u路径(@site)
admin\u sites\u路径

您的创建表单应按以下方式构建:

<%= form_for [:admin, @site] do |f| %>
  // form fields go here
<% end %>

//表单字段在这里

这将创建一个发布到Admin::SitesController#create的表单,除非您的索引视图或控制器操作将
@site
设置为现有记录,而不是
@site=site.new
。如果您将
@site
设置为现有记录,则会将的表单更改为放入更新操作,并且当您将@site…
设置为
而不是[:admin,@site]
设置为
表单时,会将其发送到SitesController,而不是admin::SitesController。您提供的错误看起来像是您犯了这两个错误。

感谢您的回复。站点索引的重定向到正在工作。如果数据库中没有记录,则显示索引页时不会出现错误。我一创建记录,就会显示错误。Rails不保存表单中的参数。数据库中的每个字段都设置为零。。。知道为什么吗?你不明白,好吧。什么是
@admin\u站点
?而
应该在哪里重定向到[:admin,@admin\u sites]
重定向?@admin\u sites只是站点的变量。我已将重定向路径更改为管理站点路径。这很有效,因为我不需要重定向到show视图。@Daniel,一个站点的multilated
@admin\u sites
是可变的吗?酷。而
redirect\u to admin\u sites\u path
redirect\u to[:admin,:sites]
完全相同。所以我还是不明白你的问题。重定向不是问题。问题是,网站不是用表单中的参数创建的。我更新了问题。在创建站点记录后帮助重定向。但是现在的问题是,表单中的参数没有保存在数据库中,数据库中的每个字段都是零。如果您在模型上使用
attr\u accessible
,请确保包含您想要的字段:
attr\u accessible:content,:slug,:title
感谢您的回复=D不幸的是,这不是错误。我已经更新了这个问题。日志的输出表明它进入了create方法。在问题中,您现在显示的错误与我回答问题时的错误完全不同(在SitesController中没有“更新”操作)。如果一个问题得到解决,并且您有后续问题,那么您应该问一个单独的问题。
<%= form_for [:admin, @site] do |f| %>
  // form fields go here
<% end %>