Rails' "has_many :through" 生成什么新方法?
What new method does Rails' "has_many :through" generate?
我正在建立房屋买卖模型之间的关联关系。 User会有多个Housing agencies和多个Houses,反之,House也会有多个Housing agencies和多个Users。具体型号如下:
模型用户
has_many :agencies
has_many :houses through: :agencies
模特经纪公司
belongs_to :user
belongs_to :house
样板房
has_many :agencies
has_many :users through: :agencies
我想知道,如果我想查询加入代理的用户,可以这样吗
House.where(id: 10).agency_users
也就是会生成agency_users
方法吗?如果有,官方的教学文件写在哪里?如果不是,应该如何解决?
谢谢
首先,您的关联定义有误 - through
是 keyword argument,因此您需要添加一个冒号:
has_many :houses through: :agencies
What new method does Rails' "has_many :through" generate?
它生成一大堆方法:
| | | has_many
generated methods | habtm | has_many | :through
----------------------------------+-------+----------+----------
others | X | X | X
others=(other,other,...) | X | X | X
other_ids | X | X | X
other_ids=(id,id,...) | X | X | X
others<< | X | X | X
# ...
我不知道你从哪里得到 agency_users
但它肯定不会从你问题中的任何代码生成,因为它基于名称参数(第一个)。
您还犯了 classic 菜鸟错误,并在 ActiveRecord 关联上调用关联方法。 where
returns 多个记录,同时关联创建实例方法。使用 find(10)
或 find_by(id: 10)
(如果允许为 nil)。
If yes, where is the official teaching document written? If not, how should it be fixed?
我不确定您在这里实际问的是什么,或者“官方教学文件”应该是什么意思。 Rails 有两个 API documentation and guides.
如果您正在谈论记录您自己的代码,这取决于您使用的是 RDoc 还是 Yard。据我所知,两者都不会自动获取关联宏生成的方法,但您可以在 Yard 中手动执行:
# @!method foo
我不知道 RDoc 是否有类似的功能,所以您可以只在整体 class 描述中记录关联。
这些关联并不是你真正想要的
这里的主要问题是您将 house_id
放在代理商 table 上,这意味着它只能为每个代理商记录一个值!这对生意不利。
你真正想要的是更像
class Listing
belongs_to :user
belongs_to :agency
end
class Agency
has_many :listings
has_many :clients,
through: :listings,
source: :user
end
class User
has_many :listings
has_many :agencies,
through: :listings
end
我通常会避免使用“房屋”一词,而使用可以涵盖许多不同类型房产的特定领域列表。
我正在建立房屋买卖模型之间的关联关系。 User会有多个Housing agencies和多个Houses,反之,House也会有多个Housing agencies和多个Users。具体型号如下: 模型用户
has_many :agencies
has_many :houses through: :agencies
模特经纪公司
belongs_to :user
belongs_to :house
样板房
has_many :agencies
has_many :users through: :agencies
我想知道,如果我想查询加入代理的用户,可以这样吗
House.where(id: 10).agency_users
也就是会生成agency_users
方法吗?如果有,官方的教学文件写在哪里?如果不是,应该如何解决?
谢谢
首先,您的关联定义有误 - through
是 keyword argument,因此您需要添加一个冒号:
has_many :houses through: :agencies
What new method does Rails' "has_many :through" generate?
它生成一大堆方法:
| | | has_many
generated methods | habtm | has_many | :through
----------------------------------+-------+----------+----------
others | X | X | X
others=(other,other,...) | X | X | X
other_ids | X | X | X
other_ids=(id,id,...) | X | X | X
others<< | X | X | X
# ...
我不知道你从哪里得到 agency_users
但它肯定不会从你问题中的任何代码生成,因为它基于名称参数(第一个)。
您还犯了 classic 菜鸟错误,并在 ActiveRecord 关联上调用关联方法。 where
returns 多个记录,同时关联创建实例方法。使用 find(10)
或 find_by(id: 10)
(如果允许为 nil)。
If yes, where is the official teaching document written? If not, how should it be fixed?
我不确定您在这里实际问的是什么,或者“官方教学文件”应该是什么意思。 Rails 有两个 API documentation and guides.
如果您正在谈论记录您自己的代码,这取决于您使用的是 RDoc 还是 Yard。据我所知,两者都不会自动获取关联宏生成的方法,但您可以在 Yard 中手动执行:
# @!method foo
我不知道 RDoc 是否有类似的功能,所以您可以只在整体 class 描述中记录关联。
这些关联并不是你真正想要的
这里的主要问题是您将 house_id
放在代理商 table 上,这意味着它只能为每个代理商记录一个值!这对生意不利。
你真正想要的是更像
class Listing
belongs_to :user
belongs_to :agency
end
class Agency
has_many :listings
has_many :clients,
through: :listings,
source: :user
end
class User
has_many :listings
has_many :agencies,
through: :listings
end
我通常会避免使用“房屋”一词,而使用可以涵盖许多不同类型房产的特定领域列表。