2

サイトのさまざまな部分を管理するために、controlpanel というサブディレクトリを使用して、アプリの別のセクションを設定しようとしました。

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/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 プラグインを使用してフォームを作成していますが、通常のフォームを使用すると発生します。

アドバイスをいただければ幸いです。

ありがとう。

4

1 に答える 1

2

createアクションが呼び出されてnewがレンダリングされた場合、nil と評価される必要があります。Page.create

おそらくcreateに渡したいでしょparams[:page]う。

于 2010-02-06T17:30:39.387 に答える