2012-04-11 6 views
2

協会:何らかの理由でRails 3のネストされたルートがネストリソースを無視するのはなぜですか?

location has_many :comments 
comment belongs_to :location 

、このGET:

/comments.json 

Started GET "/locations/5/comments.json" for 127.0.0.1 at 2012-04-10 21:18:00 -0700 
    Processing by CommentsController#index as JSON 
    Parameters: {"location_id"=>"5"} 
    Comment Load (0.1ms) SELECT "comments".* FROM "comments" 
Completed 200 OK in 21ms (Views: 1.0ms | ActiveRecord: 0.7ms) 

注SQLクエリ:

/locations/5/comments.json 

はこのGETのように振る舞っている。 "コメント" をSELECT * FROM 「コメント」

ルートは、このように設定されています

resources :locations do 
    resources :comments 
    end 

レーキルートルートを確認:ここ

location_comments GET /locations/:location_id/comments(.:format)   {:action=>"index", :controller=>"comments"} 

はindexアクションです:

def index 
    @comments = Comment.all 
    respond_to do |format| 
     format.json { render json: @comments } 
    end 
    end 

これは正しい行動ですか?それは結果と一致していますが、他に何があるべきかわかりません。これまでネストされたリソースには問題がなかったので、詳細を調べたことはありません。

+0

を私は予想外の何かを見つけるように見えることはありません。これには何が問題なのですか? – prasvin

+0

結果のクエリはSELECT「コメント」である必要があります。*「コメント」「コメント」。「location_idの」FROM = 5 –

+1

いいえ、ネスティングは、クエリの全自動をすることはありません。そうであれば、場所に関係なく、どのようにすべてのコメントを取得しますか? '@comments = Comment.all.without_nesting'のようなものかもしれません。imoは従来の方法よりもクリーンではありません。 あなたの場合、@Patrickが提案した特定の場所のコメントを簡単に得ることができます。 – prasvin

答えて

0

この試してみてください。

def index 
    @location = Location.find(params[:location_id]) 
    @comments = @location.comments 
    respond_to do |format| 
    format.json { render json: @comments } 
    end 
end 
+0

あなたはまたして全体 'respond_to'ブロックを置き換えることができます:' @ respond_with –

+0

おかげでパトリックcomments'、これは動作しますが、コメントのための定期的なindexアクションをノックアウトのコストで。 WHERE "comments"。 "location_id" = 5のような条件でSQLクエリを生成するためにネストが自動的に動作するはずであるという私の仮定で間違っていることを確認できますか?私は実際にこの仕事をするために行動を書き直さなければならないということですか? paramsの場合、[::location_idの] –

+0

少し醜い条件は、通常のindexアクションを復元します。あなたのコントローラーメソッドがはるかに複雑になる場合は、プレゼンター(別のトピックを一緒に)にそれを俳優を参照することができます –

関連する問題