2

私はばかかもしれませんが、Rails は次のような URL を生成するための気の利いた構文を提供しています。

url_for([user, comment]) # => /users/1/comment/1

渡す:editと、次のようなものを作成できます。

url_for([:edit, user, comment]) # => /users/1/comment/1/edit

しかし、次のことを行う方法はありますか?

url_for([:new, user, comments]) # => NoMethodError: undefined method `new_user_comments_url'

更新:詳細情報を追加しました。

私のroutes.rb:

resources :users do
  resources :comments
end

resources :posts do
  resources :comments
end

user_comments_urlここでの問題は、ユーザー コメントと投稿コメントの両方のビューを共有しているため、Rails の自動生成 URL ヘルパー ( ) を使用できないことです。

私の問題には2つの回避策があります(ただし、「Rails」のように感じる人はいません):

  1. ビューにロジックを追加します (if 条件など)。

  2. のような独自の URL ヘルパーを定義しますnew_parent_comment(user_or_blog)

4

4 に答える 4

4

わかりました、解決策を見つけましたが、これが意図したものかどうかはわかりません:

url_for([:new, user, :comment]) # => '/users/1/comments/new'

url_for([:new, post, :comment]) # => '/posts/1/comments/new'
于 2012-04-13T21:20:50.193 に答える
2

Rails Docsによると、url_for は渡されたオブジェクトのクラス名を使用して RESTful ルートを生成します。また、ネストされたルートでは、この仮定を正しく行うことができないことも述べています。

admin_workshop_path などのネストされたルートがある場合は、それを明示的に呼び出す必要があります (url_for がそのルートを推測することは不可能です)。

ここでは、 のような名前付きルートを使用することをお勧めしnew_user_comment_path()ます。routes.rb を次のように設定していると仮定します。

resources :users do
  resources :comments do 
  end 
end

rake routesさらに、すべてのルートの適切な名前を出力するために実行できます。これが役に立てば幸いです、/Salernost

于 2012-04-13T18:06:45.137 に答える
0

これは単にタイプミスでしょうか?私は最後の行が読むべきでcommentはないと思いますcomments

url_for([:new, user, comment])

comment変数が定義されていると仮定します。)

于 2012-04-13T20:59:55.117 に答える