2011-12-08 82 views
0

我正在開發一些Rails 3.1中型應用程序,並且當前有一些奇怪的問題隨機發生在我啓動本地服務器後。Rails 3.1真的很奇怪的問題隨機發生

它的服務器開始後確實經常發生,而且大多數時候,如果不是每一次,它是關於一個未定義的方法這實際上是定義

如果我再放入一些binding.pry調試只是使應用程序崩潰前行,我嘗試使用自己,我的方法獲得期望的結果(沒有崩潰)。如果我離開調試控制檯,服務器就會恢復正常。

比如我得到:

NoMethodError (undefined method `type=' for #<Publication:0xb398f180>): app/controllers/publications_controller.rb:115:in `new'

如果我去的那個控制器,並添加binding.pry

@publication = current_user.publications.new 
binding.pry 
@publication.type = type 

命中刷新,在控制檯輸入此

Publication.new.type = PublicationType.first 

然後離開控制檯,服務器恢復正常。

這似乎只發生在我的本地環境中。部署到生產環境或運行規範後,我從未遇到過這樣的問題。

由於我是唯一一個並不差,但很快其他開發人員將在代碼基礎上工作,所以這將是一個實際的問題。

編輯:

我今天就遇到了這個其他錯誤:

undefined method `color_class' for #<Publication:0xb39e44f0> 

= link_to truncate(comment.publication.title, :length => 30), comment.publication, :class => "category-font #{comment.publication.color_class}" 

然後,我只是做了binding.pry伎倆和類型

comment.publication.color_class 

然後離開了控制檯,一切正常......

編輯2:

OK現在它變得更加怪異......

我如上遇到同樣的問題, color_class之一。除了這次介紹的招不起作用,見撬輸出:

 
    3:  = link_to publication_path(comment.publication, :anchor => "comment-#{comment.id}") do 
    4:  = link_to comment_excerpt(comment), comment_link(comment), :class => "comment_excerpt" 
    5:  \- 
    6:  = link_to comment.author.username, comment.author 
    7:  \- 
=> 8:  - binding.pry 
    9:  = link_to truncate(comment.publication.title, :length => 30), 

    comment.publication, :class => "category-font #{comment.publication.color_class}" 
    [1] pry(#>)> comment.publication.color_class 
    NoMethodError: undefined method `color_class' for # 
    from /home/jerefrer/.rvm/gems/ruby-1.8.7-p352/gems/activemodel-3.1.0/lib/active_model/attribute_methods.rb:385:in `method_missing' 
    [2] pry(#>)> comment.publication.category 
    NoMethodError: undefined method `category' for # 
    from /home/jerefrer/.rvm/gems/ruby-1.8.7-p352/gems/activemodel-3.1.0/lib/active_model/attribute_methods.rb:385:in `method_missing' 
    [3] pry(#>)> comment.publication.id 
    => 139 
    [4] pry(#>)> comment.publication == Publication.find(139) 
    => false 
    [5] pry(#>)> Publication.find(139).color_class 
    => "some-class" 

而且我似乎無法找到任何招這個時候......繼續得到同樣的錯誤...

編輯3:

而且一個新的!

> Comment.includes(:publication => :author).order('created_at DESC').limit(10) 
Hirb Error: Association named 'author' was not found; perhaps you misspelled it? 
> Comment.order('created_at DESC').limit(10) 
[is working] 
> Comment.order('created_at DESC').limit(10).first.author 
[is working] 

任何想法?

+1

假設'Publication'是'ActiveRecord'模型,你應該除了作爲單表繼承的一部分外,不要使用'type'。你是? – Chowlett

+0

@Chowlett 其實我有刊物belongs_to:type,:foreign_key =>「publication_type_id」,:class_name =>「PublicationType」。 我只是爲了方便起見,但會嘗試在所有地方使用publication_type來查看它是否可以防止此問題。 無論如何,我遇到類似的問題(請參閱帖子編輯),但與此「類型」字段無關。 –

回答

1

您使用單表繼承,還是type只是您定義的列?如果是這種情況,請注意,activerecord默認情況下認爲類型列是在層次關係中指定子類的名稱,所以如果您沒有實現,可能會有衝突。 如果你真的想要一個屬性被稱爲類型,你應該覆蓋Base.inheritance_column

更多信息:http://code.alexreisner.com/articles/single-table-inheritance-in-rails.htmlhttp://api.rubyonrails.org/classes/ActiveRecord/Base.html(單表繼承部分)

+0

我試着不使用「publication_type」來覆蓋「type」,錯誤仍然存​​在...... –