has_one

方法本身表示什么意思。

指定一对一关系。如果,"前者 has_one 后者",那么'后者'需要包括'前者_id'属性。

引进了哪些方法,表示什么意思。

...

这里的解释参考了 belongs_to,不单它们的方法名是一样的。定们定义方法就也是一样的。

另,belongs_to 和 has_one 都属于 Singular Association.

有什么参数,表示什么意思,使用后有什么效果。

普通参数 Scope

设置一个 scope,通过前者查询后者的时候(其它时候不影响),自动加到查询语句里。(类似在后者 model 里定义了一个 default_scope,但只有通过前者查询才起作用)

举例:

has_one :author, -> { where(comment_id: 1) }
has_one :employer, -> { joins(:company) }
has_one :dob, ->(dob) { where("Date.new(2000, 01, 01) > ?", dob) }

其它

使用 primary_key 前后对比:

book has_one :author

book.author
# 传递的值是 book.id
# => Author Load (6.5ms) SELECT `authors`.* FROM `authors` \n
                         WHERE `authors`.`book_id` = book.id LIMIT 1

book has_one :author, primary_key: :a_primary_id

book.author
# 传递的值是 book.a_primary_id
# => Author Load (6.5ms) SELECT `authors`.* FROM `authors` \n
                         WHERE `authors`.`book_id` = book.a_primary_id LIMIT 1

最后更新于