2011-07-13 35 views
2

我正在尝试为cms创建管理后端。Rails 3管理命名空间

所以我有一个网站模型,一个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' 

EDIT

日志输出

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 

管理员/网站#创建

高清创建 @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 %> 

回答

4

你应该redirect_to的

[:admin, :sites] 

索引页

UPD

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

感谢您的回复。网站索引的redirect_to正在运行。如果数据库中没有记录,则会显示索引页,而不会出现错误。只要我创建一条记录,就会显示错误。 Rails不保存表单中的参数。数据库中的每个字段设置为零...任何想法为什么? – Daniel

+0

你不明白,好的。什么是“@ admin_sites”? redirect_to [:admin,@admin_sites]'重定向到哪里? – fl00r

+0

@admin_sites只是网站的变数。我已经改变了redirect_to admin_sites_path。这有效,因为我不需要重定向到show view。 – Daniel

2

运行rake routes查看您的路线。

如果您使用脚手架,您可能在您的Admin :: SitesController中有类似redirect_to @siteredirect_to sites_path的代码。您需要经过并将其更改为适当的命名路线,例如redirect_to admin_site_path(@site)admin_sites_path

+0

视图也一样 –

+0

在创建站点记录之后使用重定向协助。但现在的问题是,表单中的参数不保存在数据库中,数据库中的每个字段都是零。 – Daniel

+0

如果你在模型上使用'attr_accessible',一定要包含你想要的字段:'attr_accessible:content,:slug,:title' –

0

你创建形式应该建这样的:

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

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

+0

感谢您的答复= D 不幸的是,这不是错误。我已经更新了这个问题。日志的输出告诉它进入create方法。 – Daniel

+0

在这个问题中,你现在显示的是一个完全不同的错误,当我回答这个问题的时候(在SitesController中没有“更新”动作的效果),如果一个问题得到解决,你有一个后续问题,那么你应该问一个单独的问题。 –

相关问题