2010-02-06 41 views
2

我试图使用名为controlpanel的子目录来管理我的应用程序的单独部分,以管理网站的各个部分。Ruby on Rails - 使用子目录的问题

我已经设置了命名空间在我的routes.rb

map.namespace :controlpanel do |submap| 
    submap.resources :pages 
    # other controllers 
end 

并置于控制器和视图到相关的子目录。

Controlpanel::PagesController 

    def new 
    @page = Page.new 
    end 

    def create 
    if @page = Page.create_with_author(current_user, params[:page]) 
     flash[:notice] = 'Page was successfully created.' 
     redirect_to ([:controlpanel, @page]) 
    else 
     render :action => 'new' 
    end 
    end 

使用这种混合在类方法

def create_with_author(author, params) 
    created = new(params) 
    created.author = author 
    if created.save 
     created 
    end 
    end 

和视图(控制面板/页/ new.html.erb呈现部分称为_form

<%= render :partial => 'form' %> 

哪如下:

<% semantic_form_for([:controlpanel, @page]) do |form| %> 
    <% form.inputs do %> 
    <%= form.input :title %> 
    <%= form.input :body %> 
    <% end %> 
    <%= form.buttons %> 
    <% end %> 

If I fi if ,它按预期工作LL在正确的形式,但是重定向我到新的页面,如果我离开领域的空白,违反有效性约束,我得到以下错误:

RuntimeError in Controlpanel/pages#create 

Showing app/views/controlpanel/pages/_form.html.erb where line #1 raised: 

Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id 

任何人都可以看看是怎么回事错误?

我使用formtastic插件来创建表单,但如果我使用常规表单,它仍会发生。

任何建议非常感谢。

谢谢。

+1

在您调用'redirect_to(...)'时,在paren之前有一个空格。在Ruby 1.9中,这是不赞成的,并且是一个语法错误。只是一个小挑剔。 :) – 2010-02-06 17:41:10

回答

2

鉴于创建动作叫和呈现,Page.create必须评估为零。

您可能想要通过params[:page]创建

+0

对不起,我错过了我的帖子中的那一点。 我确实在代码中有。 – Dan 2010-02-06 17:38:35

+0

你对页面模型使用ActiveRecord吗?该文件说'create'应该总是返回一个对象。 – Leventix 2010-02-06 17:47:08

+0

我实际上使用一个mixin来保存当前用户作为作者。对不起,我现在也在上面添加了。 – Dan 2010-02-06 17:53:41