ruby-on-rails - 基于模型向路由中的正则表达式添加元素

标签 ruby-on-rails ruby

我的 routes.rb 文件中有以下设置:

范围 '(:institution)', institution:/acme/do

但是我想添加更多机构以根据我在数据库的机构列中的名称进行限制。我如何将它作为函数干净地添加到正则表达式中,而不是仅仅执行 /acme|acme1|acme2/

编辑:我按照 Cary Swoveland 的评论做了这个:

scope '(:institution)', institution: Regexp.union(Institution.pluck(:custom_sign_up_name).compact) 做

它在我的数据库已经创建时工作,但是如果我尝试运行:

rake db:drop db:setup 它告诉我数据库中不存在该表:

ActiveRecord::StatementInvalid: Mysql2::Error: 表 'ejbdev.institutions' 不存在:显示来自 `institutions` 的完整字段

我该如何解决这个问题?我需要能够删除并重新创建数据库,以便 CI 通过

最佳答案

我设法通过处理异常来解决它:

class DynamicRouter
  def self.load
    institutions = retrieve_institutions_with_custom_sign_up_names
    Rails.application.routes.draw do
      scope '(:institution)', institution: institutions do
        devise_scope :user do
          get ':institution' => 'devise/sessions#new'
        end
        get 'omniauth/:provider' => 'omniauth#institution', as: :institution_omniauth
        devise_for :users, skip: [:invitation, :omniauth_callbacks], controllers: { sessions: 'devise/sessions', registrations: 'devise/registrations' }
      end
    end
  end

  def self.reload
    Rails.application.reload_routes!
  end

  private

  def self.retrieve_institutions_with_custom_sign_up_names
    Regexp.union(Institution.pluck(:custom_sign_up_name).compact)
    rescue ActiveRecord::StatementInvalid
      return ''
  end

关于ruby-on-rails - 基于模型向路由中的正则表达式添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39159151/

相关文章:

ruby-on-rails - 事件管理员导航链接

ruby-on-rails - Rails 验证错误消息 : Add response code to default validators

ruby-on-rails - Rails引擎/如何使用种子?

ruby-on-rails - 我在哪里放置 ActionMailer View 的辅助方法?

ruby-on-rails - 带有翻译模型名称的 Rails i18n

ruby-on-rails - WebMock stub_request 不工作

Ruby Eventmachine排队问题

ruby-on-rails - 使用 Remote_cache 进行 Capistrano 部署 - 权限被拒绝

mysql - 从 Rails 中的多连接查询创建 JSON 报告

javascript - 对大量数据进行分页的正确方法