gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:55:54 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

另一种不用插件的方法是使用 named_scope .您可以在 User 中创建一个命名范围,如果它不为空,则按 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com