在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'
对我而言似乎与发送冲突?我甚至不知道如何开始调试它。
答案 0 :(得分:4)
这是由ActiveSupport问题引起的,信不信由你。您应该下载到ActiveSupport 3.0.3或通过以下方式手动要求默认的ActiveSupport变换:
require 'active_support/inflections'
基本上,在3.0.3之后,ActiveSupport可以在没有默认变形的情况下加载变形器,从而导致破坏单一化和复数化方法。我猜小马使用的邮件gem是已知被这种变化打破的库之一。
Rails开发人员显然不认为这是ActiveSupport中的错误,而是使用ActiveSupport的库中的错误。