スカフォールドを生成するためのモデルオブジェクトを作成しましたが、今は
/:controller /:id(/ objectname/1)to/:controller /:title(/ objectname/new_blog_post)。どのように私はリンクがタイトルとIDのリンクを修正するようにこれを行うのですか?私から行きたいRuby on rails:IDから名前/タイトルなどへのURL
:
/:controller/:name
スカフォールドを生成するためのモデルオブジェクトを作成しましたが、今は
/:controller /:id(/ objectname/1)to/:controller /:title(/ objectname/new_blog_post)。どのように私はリンクがタイトルとIDのリンクを修正するようにこれを行うのですか?私から行きたいRuby on rails:IDから名前/タイトルなどへのURL
:
/:controller/:name
使用
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 %>
そして、そのユーザー名はジョンであるならば、それはあなたの後に/ユーザー/ジョンをレンダリングしますそのリンクをクリックしてください
あなたはいくつかのことを変更する必要があります。
あなたは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の答えを読んだ後、多分私はその質問を誤解しました。特定の目的のために説明したようなルートを既に持っていますか?これを「基本的な」ルートで行っていますか?後者の場合、ロバートが提案するようなカスタムルートを作成してから、私が提案したもののいくつかを実行する方がはるかに優れています。
friendly_idを使用してください。
ところで、私はURLを生成していません。私はモデルに自分自身を書いた
def to_param
self.friendly_id
end
+1私は決して 'to_param'をオーバーライドしませんでした。多分私はそれをやるべきです。 – theIV
実際には、それをもう一度見て、それは良い考えですか?名前が空白の場合、コントローラーで彼の発見はどうなるでしょうか? – theIV
名前がない場合は、まだidと空白をチェックしてidをURLとして入れます。テストされていませんが、基本的な考え方を示しています。 – nitecoder