2012-04-13 2 views
2

なurl_forレールに新しい:渡す:たぶん私は愚かだが、RailsはURLのようになどを生成するために、この気の利いた構文を提供

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

:editを渡す

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

は、私はこのようなものを作成することができますそれに続く方法はありますか?

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

UPDATE:は、より多くの情報を追加しました。

マイroutes.rbを:

resources :users do 
    resources :comments 
end 

resources :posts do 
    resources :comments 
end 

私はユーザーのコメントとポストの両方の意見を共有していますので、ここでの私の問題は、私はRailsの自動生成されたURLヘルパー(user_comments_url)を使用することができないということであり、コメント。

は、2つの回避策があります(誰が「Railsの」-wayように感じていない)私の問題のために:

  1. ビューにロジックを追加し、例えばいくつかの条件があります。

  2. new_parent_comment(user_or_blog)のような自分のURLヘルパーを定義する。

答えて

4

[OK]を、解決策を見つけたが、これは意図されている場合、私はわからないんだけど1つ:

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

url_for([:new, post, :comment]) # => '/posts/1/comments/new' 
2

Rails Docsなurl_forによるRESTfulなルートを生成するために渡されたオブジェクトのクラス名を使用しています。

あなたは、このようなadmin_workshop_pathとして、ネストされたルートを持っている場合は、明示的にそれを呼び出す必要があります(なurl_forはそのルートを推測することは不可能です):それはまた、ネストされたルートで、それが正しく、この仮定を作ることができないと述べています。

new_user_comment_path()のような名前のルートを使用することをお勧めします。さらに、すべてのあなたのルートの適切な名前をプリントアウトするrake routesを実行することができます

resources :users do 
    resources :comments do 
    end 
end 

:私はあなたのようなあなたのroutes.rbを何かを設定していると仮定しています。 ほしいと思っています。 /Salernost

+0

詳細情報を追加しました。 –

0

これは単に誤植かもしれませんか?私は、最後の行がcommentscommentを読むべきではないと思う:

url_for([:new, user, comment]) 

(あなたcomment変数が定義されていると仮定。)

+0

残念なことに、タイプミスがないので、 '' ''/ users/1/comments/new/1''''(コメントが既に保存されている場合)か、既に私の質問に記載されているエラーが返されます。 –

関連する問題