Rails 3.1 действительно странные проблемы, возникающие случайно - PullRequest
0 голосов
/ 08 декабря 2011

Я работаю над некоторыми приложениями среднего размера на 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:

Хорошо, теперь это становится еще более странным ...

Я столкнулся с той же проблемой, что и выше, с color_class. За исключением этого времени описанный трюк не работает, смотрите вывод pry:

     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 Ответ

1 голос
/ 08 декабря 2011

Используете ли вы наследование одной таблицы, или тип - это просто определенный вами столбец?Если это так, учтите, что по умолчанию activerecord считает, что в столбце типа необходимо указать имя подкласса в иерархической взаимосвязи, поэтому, если вы не реализуете, могут возникнуть конфликты.Если вы действительно хотите, чтобы этот атрибут назывался типом, вам следует перезаписать Base.inheritance_column

Дополнительная информация: http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html и http://api.rubyonrails.org/classes/ActiveRecord/Base.html (раздел наследования одной таблицы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...