Ruby on Rails -Проблема с использованием подкаталогов - PullRequest
2 голосов
/ 06 февраля 2010

Я попытался настроить отдельный раздел моего приложения, используя подкаталог controlpanel для управления различными частями сайта.

Я настроил пространство имен в моих маршрутах. 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 / pages / 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 %>

Если я правильно заполняю форму, она работает как положено, перенаправляя меня на новую страницу, однако, если я оставляю поля пустыми, нарушая ограничения проверки, я получаю следующую ошибку:

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 Ответ

2 голосов
/ 06 февраля 2010

Учитывая, что вызывается действие create и отображается new , Page.create должно иметь значение nil.

Вы, вероятно, хотите передать params[:page] в create .

...