用于NilClass的未定义方法`model_name':创建局部时的类

时间:2012-08-03 22:10:37

标签: ruby-on-rails ruby partial

我正在尝试使用<%= 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

1 个答案:

答案 0 :(得分:1)

在呈现视图时,

@ coupon为nil。 问题可能是<%= render "/shopping/coupons/cou" %>没有通过控制器中的cou操作,因此form_info方法不会执行,@ coupon也不会被赋值。

你必须在渲染主视图的动作中设置@coupon(其中包含<%= render "/shopping/coupons/cou" %>的视图)。