Haml を使用した Rails 3 環境。
シナリオ
アカウントが独自のサブドメインを持つアプリがあります。アカウントが紹介パートナーから渡された可能性があります。紹介パートナーも自分のアカウントを持つことになります。各アカウントは、パートナーを含む独自のロゴを保存できます。エンド ユーザー アカウントのログイン ページにパートナー ロゴを表示する必要があります。
アプローチ
そこで私が行った方法は、ログイン URL にパラメーターを含めることでした。これにより、パートナーは自社の Web サイトに、ロゴとログイン フォームを表示するページにリンクするボタンを配置できます。
http://www.myapp.com/login?partner=bob
次に、ログインフォームでパラメーターを探します。
- if params[:partner].blank?
= %img{src = > @our_logo}
- else
- p = params[:partner]
- a = Account.where(:full_domain => p}
= %img{src = > a.logo}
これでうまくいきます。ただし、full_domain フィールドには、名前が示唆する完全なドメインが含まれているため、ログイン URL が次のようなものである限り、コードは機能します。
http://www.myapp.com/login?partner=bob.myapp.com
これは厄介だと思うし、もっと似たものが欲しい
http://www.myapp.com/login?partner=bob
私はよりきれいだと思います。
問題
私ができる必要があるのは、完全なドメインの最初の単語を分割し、それに基づいてアカウントを見つけることです. このコードは確かに正しく分割されます...
a = Account.find(1)
a.full_domain.split('.').first
しかし、レコードを見つけようとするときにそれを使用する方法がわかりません。たとえば、これは失敗しました
- a = Account.where((full_domain.split('.').first) => p).first
フルドメインはシンボルではないからです。この次の試行は失敗しました...
- a = Account.where((:full_domain.split('.').first) => p).first
文字列以外で分割できるとは思わないからです(申し訳ありませんが、私は独学で、プログラミングとRuby / Railsの両方に比較的慣れていません!)
最後に、このような文字列に変換しようとしました...
- a = Account.where((:full_domain.to_s.split('.').first) => p).first
しかしこれもうまくいきませんでした。
誰かが私を正しい方向に向けるのを手伝ってくれますか?
前もって感謝します
G