Конфликты между пони и сиквелами? - PullRequest
2 голосов
/ 24 апреля 2011

Я столкнулся с проблемой при использовании 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? Я даже не знаю, как начать отлаживать его.

1 Ответ

4 голосов
/ 25 апреля 2011

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

require 'active_support/inflections'

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

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

...