0

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

4

1 に答える 1

1

考えが単純すぎるかもしれませんが、これがあなたの望みではありませんか?

p = params[:partner]
a = Account.where(:full_domain, "#{p}.myapp.com").first
于 2013-10-31T12:46:59.640 に答える