2009-09-05 2 views
2

スカフォールドを生成するためのモデルオブジェクトを作成しましたが、今は
/:controller /:id(/ objectname/1)to/:controller /:title(/ objectname/new_blog_post)。どのように私はリンクがタイトルとIDのリンクを修正するようにこれを行うのですか?私から行きたいRuby on rails:IDから名前/タイトルなどへのURL

/:controller/:name 

答えて

4

使用

class User < ActiveRecord::Base 

    def to_param 
    name.blank? ? id : name 
    end 

end 

をPARAMやプラグインに見て、acts_as_sluggableとfriendly_idは、私の知っているものです。

編集:ああそう、あなたが使用するものが一意であることを確認してください。

EDIT:ビューで

class UsersController < ActionController::Base 

    def index 
    @users = User.all 
    end 

end 

それは同じように動作します

<% @users.each do |user| %> 
    <%= link_to user.name, user_path(@user.id) %> 
<% end %> 

そして、そのユーザー名はジョンであるならば、それはあなたの後に/ユーザー/ジョンをレンダリングしますそのリンクをクリックしてください

+0

+1私は決して 'to_param'をオーバーライドしませんでした。多分私はそれをやるべきです。 – theIV

+0

実際には、それをもう一度見て、それは良い考えですか?名前が空白の場合、コントローラーで彼の発見はどうなるでしょうか? – theIV

+0

名前がない場合は、まだidと空白をチェックしてidをURLとして入れます。テストされていませんが、基本的な考え方を示しています。 – nitecoder

1

あなたはいくつかのことを変更する必要があります。

あなたはlink_to例えばのようなものを行う際に任意のパス/ URLへのtitle属性を渡す必要があります

post_path(@post) 

なります

post_path(@post.title) 
例えばIDとは対照的に、あなたはまた、タイトルで記事を探すために、あなたの発見を更新する必要があります

@post = Post.find(params[:id]) 

あなたは:)始めるべきです

@post = Post.find_by_title(params[:title]) 

になります。あなたは明らかにタイトルをスラッグし、タイトルの一意性を確証したいと思うでしょう。

EDIT:Robert Elwellの答えを読んだ後、多分私はその質問を誤解しました。特定の目的のために説明したようなルートを既に持っていますか?これを「基本的な」ルートで行っていますか?後者の場合、ロバートが提案するようなカスタムルートを作成してから、私が提案したもののいくつかを実行する方がはるかに優れています。

0

friendly_idを使用してください。

ところで、私はURLを生成していません。私はモデルに自分自身を書いた

def to_param 
    self.friendly_id 
end 
関連する問題