2012-05-03 15 views
0

私は私のモデルでは、このルールを使用します。Railsの3 - ルーティングおよびパラメータ化名前

def to_param 
    "#{self.name.parameterize}" 
    end 

、私のヘルパーに:

def articles_menu 
    menu = '<ul>' 
    Article.all.each do |article| 
     menu += '<li>' 
     menu += link_to "#{article.name}", article 
     menu += '</li>' 
    end 
    menu += '</ul>' 
    return menu.html_safe 
    end 

が、私は/articles/my-new-flat、I'LLに行きますよエラーを取得する

私はまだ他の何かが見つからないか、私のアプリに何か問題がありますか? Iかかわら名前のパラメータ化が唯一のモデルでルールを設定する必要があるため...

答えて

0

使用FriendlyId宝石、それは、ここにあなたのコードとリンクhttps://github.com/norman/friendly_id/blob/master/README.md

問題は、そのレールに必要なものすべてですましたハブの下で "id"属性でモデルをクエリしようとしていますが、 "name"属性をクエリしていません。 FriendlyId gemは、あなたが望むモデルにこれをパッチします。

+0

** FriendlyId **を使用せずに行う方法もあります。私はこの宝石について知っていますが、私はDB構造に干渉するのが好きではないでしょう... – user984621

+0

どうにかして、あなたはどのようにレールのルーティングが動作し、 ':id'の経路パラメータを変更する必要があります。 FriendlyIdのソースコードをチェックすることができます。 2つのファイル、https://github.com/norman/friendly_id/blob/master/lib/friendly_id/finder_methods.rbとhttps://github.com/norman/friendly_id/blob/master/lib/をチェックします。 friendly_id/finder_methods.rb。 2番目は実際の拡張機能であり、ActiveRecord :: Baseを拡張する必要があります。 –

+0

もう1つ、そのメソッドの元の実装にも注意が必要です。したがって、モデルの実際のIDに応答するように注意してください。 'Article.find_on(1234)'と 'Article.find_one(" article-name-or-title ")でテストするだけです。 –

関連する問題