私のRails 3アプリケーションでは、IDとユーザー名を持つUserというモデルがあります。どこかのビューで、私は次のようしている。このようなリンクを作成しますRailsとSEF URL:link_toで使用されるキーをプライマリキーと異なるフィールドを使用するように変更する
<%= link_to 'Show this user', user %>
:その恐ろしい数は、ID(主キー)である
<a href="https://stackoverflow.com/users/980190962">Show this user</a>
を。さて、サイトのSEFnessについては、私はuser_link_to "..."(user)を使用しているにもかかわらず、idの代わりにusernameを使用したいと思います。 link_toにパラメータを追加することは役に立ちません。なぜなら、私はすでに多くの場所にそれを持っているからです(そして、いつでもどこでも別のパラメータを追加する必要はありません)。
link_toヘルパーの動作を1つのモデルに対してのみ変更するにはどうすればよいですか?
これは、私が受け入れられた答えから差し引いたように、この質問に対する完全な答えです。私は私のUserモデルに次の追加:
def to_param # overridden to use username as id, and not the id. More SEF.
username
end
def self.find(id)
@user = User.find_by_id(id)
@user = User.find_by_username(id) if @user == nil
throw ActiveRecord.RecordNotFound.new if @user == nil
@user
end
これは、今すぐ検索は、互換性のある、それはまた、後方作り、IDとユーザー名の両方を尽くすながらのlink_toで生成されたすべてのリンクは、ユーザー名を使用します。
誰かが私にとってRailsに新しいことは、これが便利だと思いました。
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-i-to_param – glortho
@Katen:あなたが話していることを知っているようです。あなたの答えを完成させるには、私は 'to_param // username/end'をモデルで実行する必要があったが、コントローラ内で 'User.find'を 'User.find_by_id(params [:id])' 。今私はもちろん、モデルのfindメソッドを検証する必要があった... – zmilojko