我有一个用户模型 用户可以拥有0+属性 通常从索引中查看这些用户 具有0个属性的用户在其名称旁边没有任何注释 用户> 0个属性,在其名称旁边有一个数字。将鼠标悬停在该用户上显示所有属性。
我想创建一个页面,仅列出具有属性的用户,然后列出每个属性。
我无法想象我的道路是什么来创造这样的东西。它应该几乎像静态页面的交易,还是应该把它放在用户控制器中?
答案 0 :(得分:3)
# UsersController
def index
@users = User.all # User.scoped for Rails < 4
@users = @users.where(...attributes logic...) if params[:with_attributes]
然后,您可以使用URL / FORM参数或特殊路由来设置:with_attributes参数。使用URL参数似乎是最好的RESTFUL。
导航至/users?with_attributes=true
OR
# routes.rb
resources :users do
collection do
get 'with_attributes' => 'users#index', :with_attributes => true # :requirements => {:with_attributes => true} for Rails < 4 ???
end
end
然后导航至/users/with_attributes
。
路由定义中的:with_attributes => true
选项将添加到请求参数中,因此您可以使用params[:with_attributes]
在控制器和视图中对其进行测试。
答案 1 :(得分:0)
可能是这样的东西。
在routes.rb
中get 'users/with_attributes' => 'users#with_attributes', as: :users_with_attributes
在控制器中
def with_attributes
@users = User.where(....
end
在视图中
= link_to 'Users with attributes', users_with_attributes_path
答案 2 :(得分:0)
您的路径只会路由到特定操作,因此您的目标实际上是根据需要显示不同的操作:
#config/routes.rb
resources :users do
collection do
get :with_attribute
get :without_attribute
end
end
#app/controllers/users_controller.rb
def with_attribute
@users = User.where(attribute: true)
end
def without_attribute
@users = User.where(...)
end