【问题标题】:How do I show database results, based on what the user clicks? (Rails) [closed]如何根据用户单击的内容显示数据库结果? (导轨)[关闭]
【发布时间】:2021-02-14 19:36:59
【问题描述】:

如果这是一个愚蠢的问题,我深表歉意,但看起来我仍然不确定 Rails 在制作额外页面时应该如何工作。

我有一个设计用户模型(和一个用户控制器),每个用户都有一个整数字段“account_type” - 0 代表管理员,1 代表经理,2 代表呼叫者。

我知道如何使用索引页来显示所有类型的用户。但是,如何制作一个根据我点击的内容显示结果的页面?例如,我在菜单中有 3 个按钮:

  1. 管理员
  2. 经理
  3. 来电者

当我点击管理员时,我应该只看到管理员。当我点击经理时,我应该只看到经理等。

这就是控制器的全部内容,现在确定如何更改它,但也不知道如何链接视图中的新页面。

class UsersController < ApplicationController

def index 
    @users = Users.all
end

end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5


    【解决方案1】:

    简单且 RESTful 的方式是为每种类型创建不同的路由:

    resources :admins, only: [:index]
    resources :managers, only: [:index]
    resources :callers, only: [:index]
    

    这将创建路由/admins/managers/callers,每个路由都转到一个单独的控制器:

    class AdminsController
      # GET /admins
      def index
        @users = User.admin 
        render 'users/index'
      end
    end
    
    class ManagersController
      # GET /managers
      def index
        @users = User.manager
        render 'users/index'
      end
    end
    
    class CallersController
      # GET /callers
      def index
        @users = User.caller
        render 'users/index'
      end
    end
    

    要为每种类型的用户创建一个按钮,最简单且最易于访问的方法是使用良好的旧链接并将它们的样式设置为看起来像一个按钮。

    <%= link_to 'Admins', admins_path %>
    <%= link_to 'Managers', managers_path %>
    <%= link_to 'Callers', callers_path %>
    

    您还想设置ActiveRecord::Enum 来处理您的整数列:

    class User < ApplicationRecord
      # ...
      enum account_type: {
        admins: 0,
        managers: 1,
        callers: 2
      }
    end
    

    如果需要,下一步将是重构和减少重复。

    【讨论】:

    • 哇,非常感谢!这非常有帮助,我在所有课程中都没有遇到过这些,所以我肯定有更好的理解。我已经设置了枚举,我缺少创建单独路由的知识。我确实有一个后续问题:我是否应该生成 3 个新控制器(管理员、经理、呼叫者)?或者我应该把这些类放在 UserController 类中......但是当我做后者时,我得到“未初始化的常量 AdminsController”,所以我猜它是第一个?
    • 我现在创建了单独的控制器,它可以工作了!我仍然很想知道制作新控制器是否是唯一(也是推荐的)解决方案。
    • 这不是唯一的方法 - 但它是一种干净、简单且可扩展的方法。您还可以使用查询字符串参数/users? account_type=admin 并通过您的UsersController#index 方法处理它,但这会导致大量代码被硬塞到一个方法中。您可以将查询字符串参数添加到链接或使用表单发送 GET 请求。这并不是您在教程中会发现的那种东西,因为它实际上只是应用基础知识(REST、MVC)来解决控制器和模型之间的关系不是 1:1 的非常常见的情况。跨度>
    猜你喜欢
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2015-09-28
    相关资源
    最近更新 更多