gpt4 book ai didi

ruby-on-rails - 访问范围内的父级

转载 作者:行者123 更新时间:2023-12-04 03:34:04 26 4
gpt4 key购买 nike

我有一个层次结构简单的 Rails 3.2 应用程序:一个用户有很多客户,一个客户有很多发票。

我希望用户通过 Client.by_user(current_user)Invoice.by_user(current_user) 只看到他们自己的客户和发票。对于客户,我有这个,效果很好:

scope :by_user, lambda { |user| where(user_id: user.id) }

但是,如果我尝试对发票进行同样的操作

scope :by_user, lambda { |user| where(client.user_id => user.id) }

它失败了,告诉我 undefined local variable or method 'client'

我做错了什么?我不想将 user_id 添加到发票中。

最佳答案

正如@gregates 在评论中所说,最好为用户、客户和发票模型定义关联,然后使用 user.clientsuser.invoicesinvoice.user 等:

class User < ActiveRecord::Base
has_many :clients
has_many :invoices, through: :clients
end

class Client < ActiveRecord::Base
belongs_to :user
has_many :invoices
end

class Invoice < ActiveRecord::Base
belongs_to :client
has_one :user, through: :client
end

但是如果您更喜欢范围内的想法,您应该将客户表加入您范围内的发票:

class Invoice < ActiveRecord::Base
...
scope :by_user, lambda { |user| joins(:client).where("clients.user_id = ?", user.id) }
...
end

关于ruby-on-rails - 访问范围内的父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14902977/

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