2012-08-03 3 views
0

< % = render "/ shopping/coupons/cou"%>을 사용하여 부분 템플릿을 만들려고합니다. 어디서 잘못되었는지 확실하지 않습니다. 감사!NilClass에 대해 정의되지 않은 메소드`model_name ': 부분을 생성 할 때 클래스

이것은 오류 메시지입니다.

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

+0

죄송합니다. 더 나아 졌어? – otchkcom

+0

예. 또한 코드를 리팩토링하는 방법에 대해서도 살펴볼 것입니다. 예를 들어,'create' 액션의 경우 사용자 정의 유효성 검사를 통해 모델로 로직을 이동시키는 방법을 고려해야합니다. 이것은 또 다른 질문을위한 것입니다;) – varatis

답변

1

@coupon는 전무하다. 컨트롤러에서 <%= render "/shopping/coupons/cou" %>cou 동작을 수행하지 않으므로 form_info 메서드가 실행되지 않고 @coupon에 값이 할당되지 않을 수 있습니다.

메인 뷰 (<%= render "/shopping/coupons/cou" %>이있는 뷰)를 렌더링하는 동작에서 @coupon을 설정해야합니다.

+0

나는 그것이 또한 이유라고 생각했습니다. 나는 부분적인 것을 사용하는 모든 방법을 찾았다. 나는 <% = @ coupon %>, <% = 렌더링 : 부분 => @ 쿠폰, : spacer_template => "쇼핑/쿠폰/쿠"%>를 시도했지만 둘 중 어느 쪽도 일하지 않았습니다. 그리고 @ 쿠폰은 지역 변수가 아니므로, 지역 주민을 사용하여 @ 쿠폰을 전달하는 것을 귀찮게하지 않았습니다. 고마워요. – otchkcom

관련 문제