3

ユーザーが注文を作成するときにフォームに値を保持したい(したがって、ユーザーがフィールドにエラーがある場合、ユーザーはすでに印刷したパラメーターを含むページを取得します)。だから私は次にします

コントローラ

class OrdersController < ApplicationController
  ...

  def new
    @everpresent_field_placeholder = "Fill that"
    @order = Order.new
  end

  def create
    order = Order.new( params[:order] )

    if order.save
      flash[:success] = "Yay! Order created!"
    else
      render 'new'
      flash[:error] = order.errors.full_messages.to_sentence :last_word_connector => ", ",        
                                                             :two_words_connector => ", "
    end
  end
end

新規注文の表示

<legend>Order's creating</legend>

<%= form_for @order, :html => {:class => "form-horizontal"} do |f| %>
  <%= field_set_tag do %>    
    <div class="control-group">
      <%= f.label :number_of_order, "Number of order", :class => "control-label" %>

      <div class="controls">
        <%= f.text_field :number_of_order, 
                         :class => "span2",                         
                         :placeholder => @everpresent_field_placeholder %>
      </div>
    </div>

    <%= f.submit "Create", :class => "btn btn-large btn-success" %>
  <% end %>
<% end %>

しかし、注文番号に間違ったものを入力して[作成]をクリックすると、次のようなエラーが発生します。

NoMethodError in Orders#create

Showing .../app/views/orders/new.html.erb where line #3 raised:

undefined method `model_name' for NilClass:Class

Extracted source (around line #3):

1: <legend>Order's creating</legend>
2: 
3: <%= form_for @order, :html => {:class => "form-horizontal"} do |f| %>
4:   <%= field_set_tag do %>    
5:     <div class="control-group">
6:       <%= f.label :number_of_order, "Number of order", :class => "control-label" %>

私は何を間違えますか?

4

1 に答える 1

4

呼び出しrender 'new'はそのコントローラーメソッドを呼び出さず、そのアクションに関連付けられたテンプレートのみをレンダリングします。つまり、createアクションが設定されることはありません。アクション内でへの@order参照をに置き換えるorderと、問題が修正される可能性があります。@ordercreate

于 2012-04-22T20:35:04.143 に答える