2012-08-03 78 views
0

我試圖使用<%= render「/ shopping/coupons/cou」%>創建部分模板。不太確定哪裏出了問題。謝謝!未定義的方法'model_name'爲NilClass:創建部分時的類

這是錯誤消息。

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 
+0

您可以請嘗試讓您的代碼易讀 – varatis 2012-08-03 22:18:01

+0

對不起,我匆忙。現在好點了嗎? – otchkcom 2012-08-03 22:28:10

+0

是的。我也會考慮重構你的代碼 - 例如,對於'create'動作,考慮用一些自定義驗證將該邏輯移動到模型。這將是另一個問題,雖然;) – varatis 2012-08-04 16:32:55

回答

1

@coupon是零的視圖被呈現時。 問題可能是<%= render "/shopping/coupons/cou" %>未通過控制器中的cou操作,因此form_info方法未執行且@coupon未分配值。

您必須在呈現主視圖(其中有<%= render "/shopping/coupons/cou" %>的視圖)的操作中設置@coupon。

+0

我認爲這也是原因。我擡頭看每一個部分。我試過<%= @ coupon%>,<%= render:partial => @ coupon,:spacer_template =>「/ shopping/coupons/cou」%>但他們都沒有工作。和@優惠券不是本地變量,我沒有打擾使用:本地人使用@優惠券。感謝壽! – otchkcom 2012-08-03 23:43:43

相關問題