2

Sinatra アプリケーションで Pony と Sequel を使用しているときに問題が発生しました。Pony がなくてもすべてうまくいきますが、Pony の続編の関連付けを解除する必要があるだけです。ブログのモデルは次のとおりです。

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'

送信との競合のように思えますか?デバッグを開始する方法さえわかりません。

4

1 に答える 1

4

これは、信じられないかもしれませんが、ActiveSupport の問題が原因です。ActiveSupport 3.0.3 にドロップダウンするか、次の方法でデフォルトの ActiveSupport の変化を手動で要求する必要があります。

require 'active_support/inflections'

基本的に、3.0.3 以降、ActiveSupport は、デフォルトの語形変化なしでインフレクターをロードできるようにしました。pony が使用していると思われる mail gem は、この変更によって壊れることが知られているライブラリの 1 つです。

Rails の開発者は、これを ActiveSupport のバグではなく、ActiveSupport を使用するライブラリのバグと考えているようです。

于 2011-04-25T17:19:04.147 に答える