2016-08-26 15 views
2

に基づいたルートにregexでする要素を追加します。私は私の施設内の名前に基づいて制限するために、より多くの機関を追加したいと思いますしかし私はroutes.rbをファイルに次のセットアップ持っているモデル

scope '(:institution)', institution: /acme/ do

をdbの列。どのように私は約きれいに行くの関数として正規表現に追加するだけではなく/acme|acme1|acme2/など

EDITやって:私のデータベースがあるとき、それは動作します

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

:私はケーリーSwovelandのコメントを続き、これをしなかったが私が実行しようとした場合、既に作成された、しかし:

rake db:drop db:setupをそのテーブルがDBに存在しないことを私に語った:

ActiveRecord::StatementInvalid: Mysql2::Error: Table 'ejbdev.institutions' doesn't exist: SHOW FULL FIELDS FROM `institutions`

どうすればこの問題を回避できますか?私は、例外を処理することにより、それを解決するために管理

+0

おそらく[正規表現::組合](のhttp://ルビー-docの.org/core-2.3.0/Regexp.html#method-c-union)が使用されます。正規表現で重要な文字( '' + ''や' '*" 'など)のエスケープも行います。 –

+0

@CarySwovelandありがとう!私を助けてくれた読書..しかし、DBの作成には問題があります。 DBがすでにそこにあるときは、しかし、私はDBをセットアップするためにレーキを呼び出す必要がある場合、私はエラーが発生します。更新された質問 – snowflakekiller

+0

snowflakekiller、申し訳ありませんが、私はRailsを知らない。 –

答えて

0

を渡すためにCIのためのDBをドロップして再作成できるようにする必要があります。

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