Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 路由:组合资源和嵌套资源_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

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