2010-02-06 26 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