ruby-on-rails - 同一资源的两个页面 - ActiveAdmin

标签 ruby-on-rails resources scope activeadmin

目前我有 User型号,注册于 user.rb作为 ActiveAdmin 的新资源。生成的页面显示所有用户的范围( all/journalists/startup_employees )。现在我想为相同的资源和相同的范围创建另一个页面,但应该只有 waiting 的记录。字段设置为 true (并且上一页应该只用 :waiting => false 显示这个)。我怎么能那样做?我知道我可以用过滤器做到这一点,但我需要两个单独的页面,菜单中有两个链接。

//解决方案

这比建议更容易(谢谢大家!):

ActiveAdmin.register User, :as => 'Waitlist User' do
  menu :label => "Waitlist"

  controller do
    def scoped_collection
      User.where(:waitlist => true)
    end
  end

  # code

  scope :all
  scope :journalists
  scope :startup_employees
end
ActiveAdmin.register User do
  controller do
    def scoped_collection
      User.where(:waitlist => false)
    end
  end

  # code

  scope :all
  scope :journalists
  scope :startup_employees
end

最佳答案

STI( 单表继承 )可用于创建同一 的多个“子资源”表/父 模型在 Active admin

  • 在用户表中添加“类型”列作为字符串
  • 将此添加到 User用类型字段镜像等待字段的模型
    after_commit {|i| update_attribute(:type, waiting ? "UserWaiting" : "UserNotWaiting" )}
    
  • 创建新模型 UserWaitingUserNotWaiting
    class UserWaiting < User
    end
    class UserNotWaiting < User
    end
    
  • 创建 Active Admin资源
    ActiveAdmin.register UserWaiting do
    # ....
    end
    ActiveAdmin.register UserNotWaiting do
    # ....
    end
    
  • 您可以在控制台中运行首次同步
    User.all.each {|user| user.save}
    

  • ………………

    另一种方法是跳过类型列(步骤 1,2 和 5)并使用范围解决其余部分。
  • 上面的第 3 步和第 4 步
  • 然后创建范围
    #model/user.rb
    scope :waiting, where(:waiting => true)
    scope :not_waiting, where(:waiting => false)
    
  • 范围在 Active Admin
    #admin/user.rb
    scope :waiting, :default => true
    
    #admin/user_not_waitings.rb
    scope :not_waiting, :default => true
    

  • 只需确保这两个页面中的其他范围也在等待/not_waiting 上过滤

    关于ruby-on-rails - 同一资源的两个页面 - ActiveAdmin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546502/

    相关文章:

    ruby-on-rails - 在 Ruby 中生成没有时间的随机日期

    ruby-on-rails - rails : CLEAN special characters from English or Arabic String

    delphi - Delphi 的资源文件

    javascript - 冒泡范围 - 从嵌套函数更新 var

    javascript - Jquery ajax 响应呈现为 HTML 而不是 JS

    ruby-on-rails - Ruby - 遍历模块

    c# - GetManifestResourceStream() 返回 null

    java - openRawResource() 总是抛出 NotFoundException

    javascript - Angularjs $scope 和这个函数

    ruby-on-rails - Ruby on Rails : How to use scope named 'open' ?