2

Railsルートヘルパーメソッドをオーバーライドして、モデルインスタンスを異なる方法で処理する方法はありますか?Userから継承しないモデルの作成を完了しましたActiveRecord::Baseが、代わりに、作成したメソッドを使用してLDAPデータベースからユーザーを取得します。ただし、現在、すべてのルートヘルパーメソッドが混乱しています。(たとえば、の代わりにをuser_path(user)与える)/users/#<User:0x3df82a0>/users/002131

次のコード(Userモデル内に配置)でメソッドをオーバーライドしようとしましたが、何も実行されていないようです。何か案は?

class << Rails.application.routes.url_helpers
  def user_path(user)
    if user.class == User
      users_path + "/#{user.id}"
    else
      users_path + "/#{user}"
    end
  end
end
4

1 に答える 1

4

モデルにメソッドを実装し、to_paramそれをルートヘルパーに渡すと、そのメソッドを呼び出す必要があります。

例:ほとんどの場合、モデルIDでルーティングするため、

user_path(some_user)

次のようなURLを生成します/users/45

ただし、ルートで使用する一意のユーザー名があるとすると、次のようになります。

class User
  def to_param
    username
  end
end

次に、を呼び出すと、次のuser_path(user)ようなものが生成されます。/users/blackbear

于 2012-07-20T18:58:29.263 に答える