1

Twitter がツイートの URL を処理する方法と同様の方法が必要です。

たとえば、現在、私の URL は次のようになっていますmydomain.com/feedbacks/1/feedbacksはコントローラーの名前です。

mydomain.com/username/feedbacks/1/Twitter の: に似た: のようにしたいtwitter.com/username/status/:id/

routes.rbはこのように見えます:

  resources :users do
      resources :feedbacks
  end

このようにすると、URLが として表示されますmydomain.com/users/1/feedbacksが、URLに実際のユーザー名が必要です。

どうすればそれを取得できますか?

ありがとう。

編集 1: この質問に別の回答を追加する場合は、既に与えられた回答に対する私のコメント/質問に対応していることを確認してください。そうしないと冗長になります。

4

2 に答える 2

5
scope ":username" do
  resources :feedbacks
end

ドキュメントから:

これにより、/bob/posts/1 などの URL が提供され、パスのユーザー名部分をコントローラー、ヘルパー、ビューで params[:username] として参照できるようになります。


アップデート:

paozacの回答の正確性をテストして確認しました。私はそれを少し明確にします。

ofを持つ@feedbackオブジェクトがあり、関連付けられたユーザーにofがあるとします。そのオブジェクトの編集ページへの URL を生成する場合は、次のようにします。id12usernamefoouser@feedback

edit_feedback_url(:username => @feedback.user.username, :id => @feedback)

出力は になります"/foouser/feedbacks/12/edit"

# A URL to the show action could be generated like so:
feedback_url(:username => feedback.user.username, :id => feedback)
#=> "/foouser/feedbacks/12"
# New
new_feedback_url(:username => current_user.username)
#=> "/foouser/feedbacks/new"

さらに、コメントでnathanvdaが指摘したように、対応する動的セグメントと一致する順序付き引数を渡すことができます。この場合、ユーザー名を最初に渡し、フィードバック ID を 2 番目に渡す必要があります。

edit_feedback_url(@feedback.user.username, @feedback)

また、コントローラーからパラメーターを処理するのに助けが必要な場合は、それに固有の新しい質問を作成することをお勧めします。

于 2011-09-04T05:15:34.887 に答える
2

dwhalen のようにスコープを定義したら、次のように URL を生成できます。

feedbacks_url(:username => 'foo')

そして得る

http://www.example.com/foo/feedbacks

また

edit_feedback_url(:username => 'foo', :id => 1)

そして得る

http://www.example.com/foo/feedbacks/1/edit
于 2011-09-08T15:55:54.613 に答える