我的 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/