Ассоциации Pony и Sequel конфликтуют?

Я столкнулся с проблемой при использовании Pony и Sequel в приложении Sinatra. Без Пони все идет нормально, но только требуя продолжения Пони, ассоциации ломаются. Вот мои модели для блога:

class Post < Sequel::Model

    one_to_many :comments, :order => :date.asc(), :conditions => {:approved => 1}

  set_schema do
    primary_key :id
    varchar :title
    varchar :text
    varchar :category
    varchar :status
    datetime :date
    varchar :link
  end
end

class Comment < Sequel::Model
    plugin :validation_helpers  
  many_to_one :posts
  attr_accessor :ip, :user_agent, :referrer, :permalink

  set_schema do
    primary_key :id
    integer :post_id
    varchar :author
    varchar :comment
    DateTime :date
    varchar :email
    varchar :url
    varchar :approved
  end

Затем я называю их так в маршруте

post '/:link' do
  @post = Post[:link=>params[:link]]
  params[:comment].merge!( {
        :ip         => request.ip.to_s,
        :user_agent => request.env['HTTP_USER_AGENT'].to_s,
        :referrer   => request.env['REFERER'].to_s,
        :permalink  => request.env['REFERER'].to_s
  } )
  begin
    @comment = Comment.create params[:comment]
    @post.add_comment @comment
  rescue
    @message = $!
  end
  @title = @post.title
  haml :posts
end

Мне даже не нужно куда-то звать пони, просто требовать его @post.add_comment @comment не получается. Это говорит

NoMethodError - undefined method `_add_comments' for #<Post:0x102b09890>:
 /Library/Ruby/Gems/1.8/gems/sequel-3.21.0/lib/sequel/model/associations.rb:1078:in `send'
 /Library/Ruby/Gems/1.8/gems/sequel-3.21.0/lib/sequel/model/associations.rb:1078:in `add_associated_object'
 /Library/Ruby/Gems/1.8/gems/sequel-3.21.0/lib/sequel/model/associations.rb:743:in `add_comment'

Мне кажется конфликт с send? Я даже не знаю, как начать его отлаживать.


person keepitterron    schedule 24.04.2011    source источник


Ответы (1)


Это вызвано проблемой ActiveSupport, хотите верьте, хотите нет. Вы должны перейти к ActiveSupport 3.0.3 или вручную потребовать перегибы ActiveSupport по умолчанию через:

require 'active_support/inflections'

По сути, после версии 3.0.3 ActiveSupport позволяет загружать инфлектор без ингибирования по умолчанию, что приводит к нарушению работы методов единственного и множественного числа. Почтовый гем, который, как я предполагаю, использует пони, является одной из библиотек, которая, как известно, сломана этим изменением.

Разработчики Rails, по-видимому, считают это ошибкой не ActiveSupport, а ошибкой библиотек, использующих ActiveSupport.

person Jeremy Evans    schedule 25.04.2011
comment
Я могу ошибаться (срочно, я новичок в рубине), но я не использую ни рельсы, ни активную поддержку, а использую Sinatra и сиквел. И требование перегибов сиквела не исправит этого. - person keepitterron; 26.04.2011
comment
Вы даже не удосужились попробовать мой совет? pony зависит от почты, которая до версии 2.3.0 (вышла вчера) зависит от active_support. Вы можете попробовать обновить почтовый гем до 2.3.0 и посмотреть, исправит ли это ситуацию. - person Jeremy Evans; 26.04.2011
comment
@keepitterron Я могу подтвердить, что то, что говорит Джереми Эванс, правда. Установка require 'active_support/inflections' устраняет эту проблему, и Pony действительно требует Mail, для которого требуется ActiveSupport (и i18n, и mine-types, для которого требуется mocha, и sqlite3-ruby, и test_declarative, и treetop и, следовательно, полиглот). Список драгоценных камней, полученных Mail через Pony, довольно смехотворен. - person Phrogz; 27.04.2011
comment
Отличные новости: почта теперь отказалась от ActiveSupport; спасибо за уведомление! Было бы неплохо удалить этот полууродливый хак. - person Phrogz; 27.04.2011
comment
я конечно пробовал но не получилось. Я думаю, что я мог напортачить что-то еще. Есть ли разница в размещении требования до или после другого требования? - person keepitterron; 02.05.2011
comment
очевидно да, они оцениваются по порядку - person Bruno Rohée; 23.01.2012