【发布时间】:2015-07-21 13:19:17
【问题描述】:
我尝试将我的模型 User 分离为 Rails 引擎,以便在多个应用程序中使用它。
为了实现这一点,我使用rails plugin new engine_name --full 创建了一个引擎,这样我就可以使用所有路由和模型,而无需安装在隔离的命名空间中。
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
scope :find_user, ->(id) { where(id: id)}
def self.say_hello(str)
puts "Welcome #{str}"
end
end
这是我的User 模型。它没有在模块中命名空间,因为引擎是使用--full 创建的。
我可以成功地将它包含到任何 Rails 应用程序中,并且可以访问路线。
我可以访问类方法:
2.1.5 :015 > User.say_hello("ferdy")
Welcome ferdy
但是当我尝试调用 create 类方法时,我得到一个错误:
User.create(email:"ferdsfd@sdfds.com",password:12345678)
ActiveRecord::StatementInvalid: Could not find table 'users'
【问题讨论】:
-
运行
rake db:create和rake db:migrate -
create需要一个表来获取列列表,这些列作为模型的属性公开。正如@ProsenjitSaha 所说,迁移数据库以创建表用户。
标签: ruby-on-rails ruby-on-rails-3 rails-engines