2

簡単な質問です。

@post.slug が (ex) "this-is-the-post-name" を返すように、投稿コントローラーにスラッグ メソッドを作成しました。

ただし、routes.rb ファイルを機能させるために何をすればよいか ('posts/this-is-the-post-name') がわからず、答えにぴったり合う質問やガイドが見つかりませんでした。どうすればいいですか?

4

3 に答える 3

6

すでにリソースを設定している場合は、ルートに何も追加する必要はありません。そうでない場合、ルートに必要なのは

resources :posts

次に、スラッグをパラメーターとして使用するにはto_param、投稿モデルでメソッドを定義する必要があります。

# post.rb
def to_param
  slug
end

このメソッドは、オブジェクトを URL に変換するために url_for によって呼び出されます。例えば

>> @post.slug = 'this-is-the-post-name'
>> post_path(@post) = '/posts/this-is-the-post-name'

もう 1 つ注意しなければならないことは、レコードのフェッチです。URL には投稿の ID が含まれなくなったため、スラッグで検索する必要があります。たとえば、show アクションで

def show
  # this will not work anymore
  # @post = Post.find params[:id]
  # you should change this to
  @post = Post.find_by_slug params[:id]
end
于 2013-02-22T07:42:51.407 に答える
5

jvnillの答えを拡張して、スラッグがpostsテーブルの列であり、一意であることを確認してください。そうしないと、問題が発生します。

于 2013-02-22T07:44:31.527 に答える
-1

独自のロールを作成することは常に良い学習体験ですが、スラッグを処理する gem を使用する方がより実用的かもしれません。FriendlyId積極的に開発されており、多くの優れたオプションがあり、スラッギングが非常に簡単になるため、私は一般的に頼ります。

フレンドリーID

于 2013-02-22T07:51:47.177 に答える