1

ネストされたリソースに問題があります。

2モデル

User => has_many :stuffs

Stuff => belongs_to :user

ルート.rb

map.resources :stuffs

map.resources :users, :has_many => [:stuffs]

/ users / 1 / stuffsを呼び出すと、対応するユーザーのスタッフが表示されます。しかし、/ users / 2/stuffsを呼び出すときにもこれを取得しました。0 "Stuffs"を返すはずですが、機能しません。

MySQL Query from Server
SELECT * FROM `stuffs`

すくいルート

stuffs GET    /stuffs(.:format)                         {:action=>"index", :controller=>"stuffs"}
                POST   /stuffs(.:format)                         {:action=>"create", :controller=>"stuffs"}
      new_stuff GET    /stuffs/new(.:format)                     {:action=>"new", :controller=>"stuffs"}
     edit_stuff GET    /stuffs/:id/edit(.:format)                {:action=>"edit", :controller=>"stuffs"}
          stuff GET    /stuffs/:id(.:format)                     {:action=>"show", :controller=>"stuffs"}
                PUT    /stuffs/:id(.:format)                     {:action=>"update", :controller=>"stuffs"}
                DELETE /stuffs/:id(.:format)                     {:action=>"destroy", :controller=>"stuffs"}
    user_stuffs GET    /users/:user_id/stuffs(.:format)          {:action=>"index", :controller=>"stuffs"}
                POST   /users/:user_id/stuffs(.:format)          {:action=>"create", :controller=>"stuffs"}
 new_user_stuff GET    /users/:user_id/stuffs/new(.:format)      {:action=>"new", :controller=>"stuffs"}
edit_user_stuff GET    /users/:user_id/stuffs/:id/edit(.:format) {:action=>"edit", :controller=>"stuffs"}
     user_stuff GET    /users/:user_id/stuffs/:id(.:format)      {:action=>"show", :controller=>"stuffs"}
                PUT    /users/:user_id/stuffs/:id(.:format)      {:action=>"update", :controller=>"stuffs"}
                DELETE /users/:user_id/stuffs/:id(.:format)      {:action=>"destroy", :controller=>"stuffs"}
          users GET    /users(.:format)                          {:action=>"index", :controller=>"users"}
                POST   /users(.:format)                          {:action=>"create", :controller=>"users"}
       new_user GET    /users/new(.:format)                      {:action=>"new", :controller=>"users"}
      edit_user GET    /users/:id/edit(.:format)                 {:action=>"edit", :controller=>"users"}
           user GET    /users/:id(.:format)                      {:action=>"show", :controller=>"users"}
                PUT    /users/:id(.:format)                      {:action=>"update", :controller=>"users"}
                DELETE /users/:id(.:format)                      {:action=>"destroy", :controller=>"users"}
           root        /                                         {:action=>"index", :controller=>"users"}

宝石リスト

actionmailer (2.3.8)
actionpack (2.3.8)
activerecord (2.3.8)
activeresource (2.3.8)
activesupport (2.3.8)
arel (2.0.6)
authlogic (2.1.6)
builder (2.1.2)
cgi_multipart_eof_fix (2.5.0)
gem_plugin (0.2.3)
i18n (0.5.0)
mongrel (1.1.5 x86-mingw32)
mysql (2.8.1 x86-mingw32)
paperclip (2.3.7)
rack (1.1.0)
rails (2.3.8)
rake (0.8.7)
tzinfo (0.3.23)

対応するuser_idのwhere句はありません。しかし、それを修正する方法は?

Railsバージョン2.3.8

このように機能するはずです=> http://guides.rubyonrails.org/routing.html2.7ネストされたリソース

誰かが助けてくれることを願っています

4

4 に答える 4

5

Stuffsコントローラーのインデックス方式では、どのようにスタッフを収集していますか?足場を使用してコントローラーを作成した場合、デフォルトで次のようになります。

@stuffs = Stuff.all

しかし、の線に沿ったものでなければなりません

@user = User.find(params[:user_id])
@stuffs = @user.stuffs

またはその効果のための何か-基本的に、あなたはすべてのものではなく、ユーザーのものを収集しています。

于 2010-12-14T16:38:57.717 に答える
3

Railsコントローラーは、デフォルトでは結果をフィルター処理しません。上記のように、おそらくStuffsControllerでStuff.allを呼び出しているため、常にすべてのStuffオブジェクトが返されます。

私は自分のサイトのデフォルトの動作にinherited_resourcesを使用しています。これらの関係を自動的に処理し、異なる動作が必要な場合にオーバーライドできます。

https://github.com/josevalim/inherited_resources

于 2010-12-14T16:55:03.543 に答える
0

ルートだけではモデルに影響しません。ただし、ユーザーIDが渡されるため、次のことができます。

User.find(params[:user_id]).stuffs
于 2010-12-14T16:40:51.227 に答える
0

これを試して

map.resources :users do |users|
  users.resources :stuffs
end
于 2010-12-14T16:44:07.567 に答える