0

ユーザー モデルとプロファイル モデルがあります。

user has_one :profile profile belongs_to :user

この関係があるため、ユーザー ID を呼び出してプロファイルを取得します。したがって、私の URL は次のようになります: website.com/users/[user_id]/profile

私の問題の解決策があるかどうかはわかりません。ここにあります: SEO フレンドリーな URL を表示したいと思います。私はfriendly_idこれに使用することを検討しています。しかし、私たちのプロファイルは企業向けであり、URL に入力したいのは企業名です。問題は、ユーザー モデルが意図的にビジネス名を要求しないことであり、user_id現在 URL に表示されているのはそれです。

プロファイル モデル (つまり、@profile.name) からビジネス名を取得し、それを使用して URL の [user_id] 部分を設定する方法はありますか?

更新: Friendly_id ジェムをセットアップしましたが、これでうまくいくようです。私のプロファイルモデルには、これがあります:has_friendly_id :name, :use_slug => true

プロファイルを更新したときに、プロファイルfriendly_idのビジネス名を URL の一部に挿入して、URL をスラッグ化しましたuser_id。しかし、もちろん、これは例外をスローしました。

したがって、プロファイル モデルのビジネス名が Mike's Bar の場合、URL は /users/mike-s-bar/profile になります。例外には次のように書かれています: でユーザーが見つかりませんでしたID=mike-s-bar.

これが私のプロファイルコントローラーです:

def show
  @user = User.find(:all)
  @profile = User.find(params[:user_id])
end  

これを機能させる方法はありますか?

4

1 に答える 1

0

ビジネスには複数のユーザーがいますか? もしそうなら、どのようにし/users/xzy/profileて一意になることができますか?

それ以外の場合: friendly_id がモデル テーブルの外部の列を処理できるとは思いません。ただし、ここで私が試すアプローチは次のとおりです。

class User

  # used by rails to generate URLs - defaults to ID
  def to_param
    "#{self.id}-#{self.business.name}"
  end

  ...
end

このfindメソッドは、ダッシュの後ろのすべてを単独でスキップします。これにより、URL が少し読みにくくなります:/users/xzy/profileこれ /users/7-xzy/profile は、SO が行う方法と非常によく似たものになります。

于 2009-09-04T10:10:21.940 に答える