ruby-on-rails - 使用相同的操作来显示所有(索引)对象,同时还显示由 url 参数限定范围的列表

标签 ruby-on-rails ruby activerecord

我在想出执行以下操作的好方法时遇到问题。我有一个非常通用的组织模型和用户模型。组织 has_many :usersUser own_to :org

我正在尝试找到一种显示不受组织限制的用户列表的方法,但也显示受组织限制的用户列表。我知道我可以嵌套路线,并且只有两条不同的路线,例如

map.resources :users
map.resources :orgs, :has_many => :users

问题是它们都返回到用户 Controller 中的相同操作。 Controller 代码开始变得非常困惑,因为我必须检查 :org_id 参数是否存在。然后我必须决定是返回对 User 的 find 调用的正常结果,还是返回范围限定为 Org 的 find 的结果。我不确定这里最好的解决方案是什么,或者最佳实践是什么。如果对此有一定了解的人可以赐教,那就太好了。

最佳答案

无需插件即可执行此操作的另一种方法是使用 named_scope 。您可以在 User 中创建一个命名范围,如果 org_id 不为空,则按 org_id 进行过滤。

class User < ActiveRecord::Base
  belongs_to :org
  named_scope :by_org, lambda{|org| org.blank? ? {} : { :conditions => ['org_id = ?', org] }}
end

在 Controller 中只需使用您的命名范围。这样,如果您最终在 Controller 中提供更多过滤器选项,则无需重复它们:

class UsersController < ApplicationController
  def index
    @users = User.by_org(params[:org_id]).all
    ...
  end
end

关于ruby-on-rails - 使用相同的操作来显示所有(索引)对象,同时还显示由 url 参数限定范围的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835342/

相关文章:

ruby-on-rails - 与 %> 相比,-%> 在 Ruby on Rails 中是什么意思

ruby-on-rails - Redis 对象 - 从数据库中获取所有对象 - 配置文件 View 计数器

ruby - 方法和 proc 对象有什么区别?

ruby-on-rails - message.body.decoded 电子邮件显示一团糟

mysql - rails 3 : How to find records with field possibly equals to nil?

ruby-on-rails - Ruby on Rails 搜索数组(事件记录)

javascript - Ruby on Rails 检查是否启用了 javascript

ruby - 当我的脚本中断时,如何让 shell/ruby 发出声音(让我的电脑发出哔哔声或播放声音/音轨)?

ruby-on-rails - 查找具有所有关联记录的记录

javascript - 从本地主机上的 Rails Controller 执行时,PhantomJS 脚本挂起