2012-12-02 63 views
1

我無法理解爲什麼,但是我的新視圖開始崩潰。Rails - 未定義的方法`model_name'爲NilClass:新行動中的類

我有模型票務

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」。那是因爲當你看看裏面的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 

其中ActiveModel::Naming.param_key(object)被調用,我們在下面的方法

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得到nil
要做到這一點,你可能要遵循this guide,它解釋瞭如何調試Rails應用程序。


而且您可能還想交換這些行。

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

因爲現在它的方式你不會得到任何有用的輸出。

+0

這就是我的想法。 –

+0

我該如何追蹤?也許重建項目會更快,因爲我需要明天展示項目。 – skrypalyk

+0

@m_x,在我的路線或視圖中命名。 – skrypalyk

相關問題