Rails 4:非RESTful路径

时间:2014-04-30 21:05:55

标签: ruby-on-rails ruby-on-rails-4

我有一个用户模型 用户可以拥有0+属性 通常从索引中查看这些用户 具有0个属性的用户在其名称旁边没有任何注释 用户> 0个属性,在其名称旁边有一个数字。将鼠标悬停在该用户上显示所有属性。

我想创建一个页面,仅列出具有属性的用户,然后列出每个属性。

我无法想象我的道路是什么来创造这样的东西。它应该几乎像静态页面的交易,还是应该把它放在用户控制器中?

3 个答案:

答案 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