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

И вид (ControlPanel/страницы/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 %> 

Если я fi 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 (...)' у вас есть место перед парнем. В Ruby 1.9 это устарело и синтаксическая ошибка. Просто маленький нит-кик. :) –

ответ

2

Учитывая, что создать действие называется и новый визуализируется, Page.create должен оценить к нолю.

Возможно, вы захотите пройти params[:page] до создать.

+0

Извините, я пропустил этот бит в своем посте. У меня есть код. – Dan

+0

Используете ли вы ActiveRecord для модели страницы? В документации говорится, что 'create' должен всегда возвращать объект. – Leventix

+0

Я использую mixin для сохранения текущего пользователя в качестве автора. Извините, я тоже добавил это выше. – Dan