4

Stackoverflow の URL は次のようになります。

http://stackoverflow.com/users/12345/name-of-user

これには、真の RESTful ルートのすべての属性があります。

:resource_name/:resource_id

しかし、セグメントnameの後にもパートがあります。:resource_idRails の非リソース ルートを使用してそれを達成する方法を知っています。しかし、組み込みのデフォルトresources :userメソッドを使用して同じ URL を取得することは可能ですか?

デフォルトでは、3 番目のセグメントは Rails のフォーマットです。

/users/:id(.:format)      users#show
4

3 に答える 3

0

controller があるとしますquestions_controller

routes.rb で:

get 'questions/:id/:slug', to: 'questions#show'

question_controller.rb で:

def show
  @question = Question.find(params[:id])
  if request.path != question_path(@question)
    redirect_to @question, status: :moved_permanently
    return
  end
...
end

question.rb:

def to_param
  "#{id}/#{name.parameterize}"
end

それでおしまい。生成されたすべてのパスにはスラッグが含まれ、/questions/42、またはにアクセスしようとすると/questions/42/incorrect-slug、リダイレクトされます。

于 2013-07-14T17:51:25.480 に答える
0

FriendlyId を使用できます。Githubにリポジトリがあり、十分に文書化されています。Ryan bates も、 RailsCastsで非常に優れたビデオ チュートリアルを作成しています。

于 2013-05-27T06:47:42.727 に答える