2011-07-14 5 views
2

今、私はこのRails 3でフレンドリURLを定義するにはどうすればいいですか?

http://myapp.com/pages/1 
http://myapp.com/pages/2 
http://myapp.com/pages/3 
http://myapp.com/pages/4 

そして、それぞれのページのようなものを持っているが、私は必要なもの1 user

に属しているページのために独自のカスタム名を設定するには、各ユーザーに対してです。

私はfriendly_id宝石http://norman.github.com/friendly_id/ を使用して考えていたが、私は直接カスタムフレンドリーURL

どのように進めるべきを設定するには、スラグを編集するための任意の方法を見つけていませんか?モデルの一つに

+0

この他のポストを見てください: [http://stackoverflow.com/questions/4995759/creating-seo-friendly-urls-in-rails-3][1] 願って助けて、 [1]:http://stackoverflow.com/questions/4995759/creating-seo-friendly-urls-in-rails-3 –

答えて

2

追加to_param方法は役立つはず:

def to_param 
    "#{id}-#{call_to_method_that_returns_custom_name.parameterize}" 
end 

ホープこれはあなたがFriendlyIDは素晴らしい逸品です:)

3

探しているものです。

ユーザーが定義したページURLを実装するのは難しくありません。 あなたがlink属性の入力を追加user_idpage#newlink

class User < ActiveRecord::Base 
    has_many :pages 

class Page < ActiveRecord::Base 
    belongs_to :user 

    has_friendly_id :link # link is name of the column whose value will be replaced by slugged value 

とテーブルpagesを作成します。

また、titleに何か他のものを設定することもできます:use_slug => trueオプション。このようにFriendlyIDはタイトルを取り、それを変更して、それが制限された文字を持たないようにします。それはそれ自身のテーブルを使用してスラグを保存します。パフォーマンスを向上させるにはを使用してください。

ユーザーに、彼らはカスタムリンクを設定するためにwan'tかどうかの選択肢を与えるために

を更新し、あなたがこれを行うことができます:

  1. セットナメクジなしlinkフィールド上friendly_id ..
  2. メイク仮想属性permalinkを入力してフォームに表示することができます。
  3. before_filterで、permalinkが設定されているかどうかを確認します。
  4. の場合は、linkフィールドに書き込みます。
  5. そうでなければ、linkフィールドにタイトルを書いてください。

FriendlyIDは、babosa gemを使用してスラッグを生成します。私はfriendly_url宝石を使用していないし、私の方法が効率的であるかどうかわからないのです

protected 
    def generate_link 
       #you might need to use .nil? instead 
    self.link = self.permalink.empty? ? make_slug(self.title) : make_slug(self.permalink) 
    end 

    def make_slug(value) 
    value.to_slug.normalize.to_s #you could as well use ph6py's way 
    end 
+0

しかし、もし私が持っている1つのフィールドページの 'title'フィールド....私は' has_friendly_id:title'を使うかもしれませんが、私はtitleに基づいてfriendly_idを使ってページに行くことができますが、第二のオプションを与えたいと思います。 'custom_link 'だからwhユーザーが何らかの値を設定すると、ユーザーが何らかのカスタムを望んでいて、 'URL 'のページのタイトルがそれが良い方法になるのであれば、' friendly_id'の代わりに 'custom_link'を最初にとりますか?どう思いますか? –

+0

質問を更新しました。チェックアウトしてください :) – bassneck

0

:あなたは同様にそれを使用する場合、これはあなたのフィルターはようになります方法です。しかし、それは私のためにうまく動作します。

私はモデルNodeidとフレンドリーなURLフィールドurl_titleを持っています。

マイroutes.rbファイル:

resource 'nodes/:url_title', :to => 'Nodes#view' 

nodes_controller.rb

class NodesController <ActiveController 
def view 
    @node = Node.find_by_url_title(:params(url_title)) 
end 
end 

そして、あなたの視野を埋めるために@node変数を使用します。

ここで、www.example.com/nodes/awesome-titleと入力すると、適切なページに移動します。これに対する1つの議論は、プライマリ以外のフィールドにインデックスを作成する必要があります。しかしfriendly_urlの宝石でさえパフォーマンスが向上するためにはこの値が必要かもしれないと思います。また、プライマリ以外のフィールドurl_titleは一意である必要があります。これも、friendly_urlの正しい作業の場合でも必要になる場合があります。 私がこれらの前提に間違っていれば私を修正してください。

0

あなたがthis screencast,を見ると、あなたにそれを説明します。それは古いですが、かなり関連性があります。

0

私はfriendly_id 4.xを使用してこれの投稿を書いています。まず、定義された属性に基づいてスラッグを作成し、ユーザーがフォームを使用してそれを更新できるようにします。ここで確認してください:http://fedible.org/posts/customizing-friendly_id-slugs

0

は、あなたが達成することができ、さまざまな方法がありますthis- Stringex

2)

3)ステップの方法論によって

完全なステップをfriendly_id

コードはSluggable-ファインダーを使用して

1)それぞれを使用する理由はhereで確認できます。幸せな読書!

関連する問題