扩展模型类

时间:2012-02-04 00:49:28

标签: ruby-on-rails ruby ruby-on-rails-3.1

我正在创建一个身份验证引擎。它有一个内置的模型User,它包含一些基本信息。我希望能够从引擎外部(从父应用程序)扩展它。例如,添加一些has_many关系。我几乎设法通过创建:

来做到这一点
#host_app/app/models/my_user.rb
calss MyUser < User
   has_many :comments

我以为是这样,但另一个问题却出现了。在我的用户引擎中显示动作的视图我生成了一个额外的部分,它应该在host_app/app/views/shared/_partial_to_add.html.erb我也传递给@user。这应该使我能够在不触及引擎本身的情况下添加关于用户的一些附加信息(例如他写的评论列表或其他内容)。但事实证明(很明显)这个@user几乎没用,因为它没有来自MyUser类的任何新方法。

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

Ruby有开放课程。如果您想扩展引擎的用户模型,您应该可以从父应用程序执行此操作:

User.class_eval do
  has_many :comments
end

(这使用class_eval,以便Rails在评估此代码之前自动加载定义User 的文件。)将其放在一个文件中,该文件将在应用程序执行时加载;要么把它放在config / initializers /中,要么把它放在lib /和require上。