小马和续集协会发生冲突?

时间:2011-04-24 19:17:21

标签: ruby sinatra sequel pony

在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'

对我而言似乎与发送冲突?我甚至不知道如何开始调试它。

1 个答案:

答案 0 :(得分:4)

这是由ActiveSupport问题引起的,信不信由你。您应该下载到ActiveSupport 3.0.3或通过以下方式手动要求默认的ActiveSupport变换:

require 'active_support/inflections'

基本上,在3.0.3之后,ActiveSupport可以在没有默认变形的情况下加载变形器,从而导致破坏单一化和复数化方法。我猜小马使用的邮件gem是已知被这种变化打破的库之一。

Rails开发人员显然不认为这是ActiveSupport中的错误,而是使用ActiveSupport的库中的错误。