【问题标题】:Rails engine with --full option model带有 --full 选项模型的 Rails 引擎
【发布时间】: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:createrake db:migrate
  • create 需要一个表来获取列列表,这些列作为模型的属性公开。正如@ProsenjitSaha 所说,迁移数据库以创建表用户。

标签: ruby-on-rails ruby-on-rails-3 rails-engines


【解决方案1】:

实际上,我不会将整个模型与 gem 隔离,因为它取决于您的应用程序的架构。我建议您将 User 模型的常用方法分离到关注点,将关注点移至 gem,并将其包含在您需要的应​​用模型中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多