如何使用Rails关联访问值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Rails关联访问值相关的知识,希望对你有一定的参考价值。
所以,我试图了解rails中的Associations(我正在使用5.1.5)。
我有部分工作,但我正在尝试获取bank.title
,当我收到付款清单时,该user
has_many :payments
has_many :bank_accounts
has_many :banks, :through => :bank_accounts
payments
belongs_to :user
# References: user_id and bank_account_id
bank_account
belongs_to :user
belongs_to :bank
# References: user_id and bank_id
bank
has_many :bank_accounts
# Has a field title I would like to access
用于关联的银行帐户。
我似乎无法为我的生活做出努力,我将如何解决这个问题还是有更好的方法来做到这一点?
user.banks
如果您的设置工作正常,您应该能够检索相对于一个用户的银行数组:
payment.user.banks
要么
user.banks.map(&:title)
当你得到一个数组时,你必须迭代它才能获得标题(bank_id
being是最短的一个)
这就是你现在所拥有的,你不知道(还)支付银行所指的银行,因为单个用户可以有很多银行。
如果您想让银行与付款相关联,您需要在payments
表上指定belongs_to :bank
并将payment
添加到您的payment.user
payment.bank
模型中。所以你可以从一张付款记录中得到:
validates :user_id, presence: true
validates :bank_id, presence: true
可以考虑在付款模式中添加约束:
validate :user_owns_bank
def user_owns_bank
user.banks.include?(bank)
end
为确保安全,请确认为付款指定的银行已由用户拥有:
bank_account_id
- 编辑 -
所以你有一个has_many :payments
付款。
你应该添加:
- 你的bank_account模型上的
belongs_to :bank_account
payment.bank_account.bank.title
付款模式
那么你可以通过以下方式达到:
validate :user_owns_bank
def user_owns_bank
user.bank_accounts.include?(bank_account)
end
不过,这个解决方案/设置是可以接受的,但我建议你从我上面描述的内容中重构它;我不会存储对连接表的引用。但只要有效,每个人都可以采用自己的方法。
虽然该帐户的用户所有权验证仍然适用,但应移至您的付款模式:
has_one
(最后一个没有经过测试;但更多的是要坚持这个非常有效的验证很有意义,你想避免创建一个帐户不具备的记录 - 但你可能已经计划过了,但是没看到你的所有代码)
您将不得不为银行对象的支付模型添加# References: user_id and bank_account_id
payments
belongs_to :user
belongs_to :bank_account
has_one :bank, through: :bank_account
关系,通过银行帐户连接以从支付模型访问它。
payment.bank.title
现在,您可以使用付款模型对象访问银行名称
@user = User.first
@user.payments
希望能帮助到你 !
您的代码似乎没问题,您应该能够访问特定用户(例如id = 1的用户)的付款
@user = User.first
@user.banks
这将为您提供第一个用户的所有付款的列表,以及类似的用户银行列表(id = 1),
qazxswpoi
以上是关于如何使用Rails关联访问值的主要内容,如果未能解决你的问题,请参考以下文章