0

<%= render "/shopping/coupons/cou" %> を使用して部分的なテンプレートを作成しようとしています。どこが間違っていたのかよくわかりません。ありがとう!

これがエラーメッセージです。

undefined method `model_name' for NilClass:Class

Extracted source (around line #3):
1: <h4> Coupon </h4>
2: 
3: <%= form_for(@coupon, :url => shopping_coupon_path(@coupon)) do |f| %>
4:   <div class="field">
5:     <%= f.label :code %>
6:     <%= f.text_field :code %>

これは私のクーポンコントローラーです

class Shopping::CouponsController < Shopping::BaseController
  def cou
    form_info
  end

  def create
    @coupon = Coupon.find_by_code(params[:coupon][:code])

    if @coupon && @coupon.eligible?(session_order) && update_order_coupon_id(@coupon.id)
      flash[:notice] = "Successfully added coupon code #{@coupon.code}."
      redirect_to shopping_orders_url
    else
      form_info
      flash[:notice] = "Sorry coupon code: #{params[:coupon][:code]} is not valid."
      render :action => 'show'
    end
  end

  private

  def form_info
    @coupon = Coupon.new
  end

  def update_order_coupon_id(id)
    session_order.update_attributes( :coupon_id => id )                                      
  end
end
4

1 に答える 1

1

ビューがレンダリングされている場合、@coupon は nil です。問題は、コントローラーのアクションを<%= render "/shopping/coupons/cou" %>通過しないため、メソッドが実行されず、@coupon に値が割り当てられない可能性があります。couform_info

メイン ビュー (を含むビュー) をレンダリングするアクションで @coupon を設定する必要があります<%= render "/shopping/coupons/cou" %>

于 2012-08-03T23:04:34.973 に答える