新手问题 3-level nested routes 的问题

levan · 2013年04月19日 · 最后由 ery 回复于 2013年04月19日 · 2713 次阅读

在做一个简单的相册功能,三个类:user, album,photo model:

class User < ActiveRecord::Base
  has_many :albums, :inverse_of  => :user, :dependent => :destroy
  has_many :photos, :inverse_of  => :user, :dependent => :destroy
end

class Album < ActiveRecord::Base
    belongs_to :user, :inverse_of  => :albums, :foreign_key => 'user_id'
    has_many :photos, :inverse_of  => :album, :dependent => :destroy
end

class Photo < ActiveRecord::Base
    belongs_to :user, :inverse_of  => :photos
    belongs_to :album, :inverse_of  => :topics
end

routes:

resources :users, shallow: true do 
    resources :albums do
        resources :photos
    end
end

rake routes:

/albums/:album_id/photos(.:format)     photos#index
/albums/:album_id/photos(.:format)     photos#create
/albums/:album_id/photos/new(.:format) photos#new
/photos/:id/edit(.:format)             photos#edit
/photos/:id(.:format)                  photos#show
/photos/:id(.:format)                  photos#update
/photos/:id(.:format)                  photos#destroy
/users/:user_id/albums(.:format)       albums#index
/users/:user_id/albums(.:format)       albums#create
/users/:user_id/albums/new(.:format)   albums#new
/albums/:id/edit(.:format)             albums#edit
/albums/:id(.:format)                  albums#show
/albums/:id(.:format)                  albums#update
/albums/:id(.:format)                  albums#destroy

album controller:

def index
    @albums = @user.albums
end
def destroy
    @user = current_user
    @album = @user.albums.find(params[:id])
    @album.destroy
    redirect_to user_albums_path(@user)
end

我的问题: 请教正确的 destroy 应该怎么写?因为在 routes 里 albums#destroy 的路由是没有 user 的 id。 用不了@user = User.find(params[:id]) 这个时候应该怎样准确的删除该用户的 album 呢?

另外,到时候如果再加多 photo_comments,routes 不就会又嵌套多一层?可是看 Guides 介绍的是不推荐超过两层的,求最佳实践?

感谢:)

增加一个新的路由

resources :albums

album_path(:id => xxxx)
需要 登录 后方可回复, 如果你还没有账号请 注册新账号