2012-12-02 3 views
1

이유는 알 수 없지만 새로운 뷰가 충돌하기 시작했습니다.레일즈 - NilClass를위한 정의되지 않은 메소드`model_name ': 새로운 액션의 클래스

나는 모델 티켓

class Ticket < ActiveRecord::Base 
attr_accessible :body, :department, :email, :name, :reference, :subject, :status 
has_many :replies, :dependent => :destroy 

간단하게 새로운 액션

def new 
    logger.debug "#{@ticket}" 
    @ticket = Ticket.new 
    respond_to do |format| 
    format.html # new.html.erb 
    format.json { render json: @ticket } 
    end 
end 

및 new.haml.html ( 서식을 잘못 HAML에 대한 죄송합니다)이 :

= form_for @ticket do |f| 
- if @ticket.errors.any? 
#error_explanation 
    %h2= "#{pluralize(@ticket.errors.count, "error")} prohibited this ticket from being saved:" 
    %ul 
    - @ticket.errors.full_messages.each do |msg| 
     %li= msg 

.field 
    = f.label :name 
    = f.text_field :name 
.field 
- if current_admin 
= f.label :email 
= f.text_field :email, :value => "#{current_admin.email}", :disabled => :true 
- else 
    = f.label :email 
= f.text_field :email 
.field 
= f.label :department 
= f.select :department, options_for_select(["First department","Second department","Third department"]) 
.field 
= f.label :subject 
= f.text_field :subject 
.field 
    = f.label :body 
= f.text_area :body 
- if current_admin 
.field 
    = f.label :status 
    = f.select :status, options_for_select(["Waiting for Staff Response","Waiting for Customer","On Hold", "Cancelled", "Completed"]) 
    .actions 
    = f.submit 'Save' 

오류 :

ActionView::Template::Error (undefined method `model_name' for NilClass:Class): 
1: = form_for @ticket do |f| 
2: - if @ticket.errors.any? 
3:  #error_explanation 
4:  %h2= "#{pluralize(@ticket.errors.count, "error")} prohibited this ticket from being saved:" 
app/views/tickets/_form.html.haml:1:in 
`_app_views_tickets__form_html_haml__659380982_96991070' 
Rendered /home/denmed/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.8/lib 
/action_dispatch/middleware/templates/rescues/_trace.erb (5.9ms) 
Rendered /home/denmed/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.8/lib 
/action_dispatch/middleware/templates/rescues/_request_and_response.erb (4.1ms) 
Rendered /home/denmed/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.8/lib 
/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (42.2ms) 

및 routes.rb

resources :tickets do 
    resources :comments 
end 

내가 콘솔에서 티켓을 만들 수 있습니다, 그래서 어디에 문제가? 누군가가 오류가있는 곳을 제안 할 수 있습니까?

+0

스택 추적의 첫 번째 줄을 게시 할 수 있습니까? –

+0

@m_x 여기 있습니다. – skrypalyk

+0

그것은 이상합니다. _form 부분을 어떻게 렌더링합니까? 부분 변수에서 변수를 사용할 수없는 경우가 있습니다. –

답변

0

문제는 @ticket이 어떻게 든 "nilified"가된다는 것입니다. 당신이 내 호출되는 ActiveModel::Naming.param_key(object) form_for

def form_for(record, options = {}, &proc) 
    # .... 
    object = record.is_a?(Array) ? record.last : record 
    object_name = options[:as] || ActiveModel::Naming.param_key(object) 
    # .... 
end 

으로 볼 때 우리는 다음과 같은 방법이

def model_name_from_record_or_class(record_or_class) 
    (record_or_class.is_a?(Class) ? record_or_class : record_or_class.class).model_name 
    end 

을에서 생을 마감하기 때문에 그게 전부 당신은이 방법으로 전무를 전달하는 경우는 오류가 발생합니다 참조 할 수 있습니다 게시 됨 - 그래서 @ticket이 도착하는 곳과 이유를 확인하십시오. this guide을 따르고 싶다면 레일즈 앱을 디버깅하는 방법을 설명하십시오.


그리고 이러한 행을 바꿀 수도 있습니다.

def new 
    logger.debug "#{@ticket}" 
    @ticket = Ticket.new 
end 

방법은 바로 지금이기 때문에 당신이 늘 유용한 출력을 얻을.

+0

그게 내가 생각하기에 너무. –

+0

어떻게 추적 할 수 있습니까? 내일 프로젝트를 보여줘야하기 때문에 프로젝트를 다시 만드는 것이 더 빠를 것입니다. – skrypalyk

+0

@m_x, 내 경로 또는 뷰 이름 지정에 사용됩니다. – skrypalyk