【发布时间】:2011-07-02 13:29:41
【问题描述】:
我正在使用 Ruby on Rails 3.0.7,我正在尝试为我的应用程序实现一个 act_as_article 插件。我要做的是为该插件内的“充当文章类”运行 validation 方法(注意:我的插件需要创建一些数据库表列才能工作 - 其中之一由title 属性)。
在我的 RoR 应用程序中,我有以下代码:
# vendor/plugins/article/lib/acts_as_article.rb
module Article
extend ActiveSupport::Concern
included do
validates :title, # Validation method
:presence => true
end
module ClassMethods
def acts_as_article
send :include, InstanceMethods
end
end
module InstanceMethods
...
end
end
ActiveRecord::Base.send :include, Article
# app/models/review.rb
class Review
acts_as_article
...
end
使用上面的代码插件可以工作。但是,如果我在 Review 类中添加一些 Record Association,如下所示:
class Review
acts_as_article
has_many :comments # Adding association
...
end
在我的ReviewsController 中,我还添加了以下内容:
def create
...
@article.comments.build( # This is the code line 89
:user_id => @user.id
)
if @article.save
...
end
end
我收到此错误
NoMethodError (undefined method `title' for #<Comments:0x00000103abfb90>):
app/controllers/articles_controller.rb:89:in `create'
可能发生这种情况是因为对所有 Review“关联”类\模型和 Comment 类没有title 属性的验证运行。我认为这是因为如果在插件代码中我像这样注释掉验证方法
module Article
...
included do
# validates :title, # Validation
# :presence => true
end
...
end
我不再收到错误了。
那么,我该如何解决这个问题?
注意:我不是创建插件的专家(这是我第一次),所以我也含蓄地问我是否在插件实现方面做得很好......
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 validation plugins