Ruby on rails 路由:组合资源和嵌套资源
Ruby on rails 路由:组合资源和嵌套资源,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,/items应列出所有项目 /user/items应仅列出当前用户的项目 我已经定义了用户和项目之间的关系,因此current\u user.items可以正常工作 我的问题是: items#index操作如何知道它是直接调用的还是通过用户资源调用的,以便知道填充@items的内容 # routes.rb resources :items resource :user do resources :items end # items_controller.rb class ItemsCont
/items
应列出所有项目/user/items
应仅列出当前用户的项目
我已经定义了用户和项目之间的关系,因此current\u user.items
可以正常工作
我的问题是:items#index
操作如何知道它是直接调用的还是通过用户资源调用的,以便知道填充@items
的内容
# routes.rb
resources :items
resource :user do
resources :items
end
# items_controller.rb
class ItemsController < ApplicationController
def index
@items = Item.all
end
end
# users_controller.rb
class UsersController < ApplicationController
def show
@user = current_user
end
end
#routes.rb
资源:项目
资源:用户做什么
资源:项目
结束
#项目\u controller.rb
类ItemsController
它看起来很粗糙,但这是我的第一个想法:)
resource:user do
资源:项,:i\u am\u嵌套\u资源=>true
结束
类ItemsController
或者你也可以采取粗暴的方式:解析你的请求url:)。我通过将代码分成两个控制器(一个名称空间)来解决这个问题。我认为这比将条件逻辑添加到单个控制器更干净
# routes.rb
resources :items
namespace 'user' do
resources :items
end
# items_controller.rb
class ItemsController < ApplicationController
def index
@items = Item.all
end
end
# user/items_controller.rb
class User::ItemsController < ApplicationController
def index
@items = current_user.items
end
end
#routes.rb
资源:项目
命名空间“user”do
资源:项目
结束
#项目\u controller.rb
类ItemsController
这似乎是一件很常见的事情,我很想做——也许我走错了方向。一个想法是有两个控制器(Items和UserItems)。这是一个更干净的解决方案,还是一个模型有多个控制器通常不是一个好主意?
# routes.rb
resources :items
namespace 'user' do
resources :items
end
# items_controller.rb
class ItemsController < ApplicationController
def index
@items = Item.all
end
end
# user/items_controller.rb
class User::ItemsController < ApplicationController
def index
@items = current_user.items
end
end