您好我正在尝试在rails中运行联接查询。我正在尝试从我的用户模型输出特定数据,同时从我的contactDetails模型中获取数据。代码:
User.where(user_type: :lender).all.each do |user|
result <<
"#{user.id}, " +
"#{user.contact_details},"
end
以上打印得很好,但是当我添加:
User.where(user_type: :lender).all.each do |user|
result <<
"#{user.id}, " +
"#{user.contact_details}," +
"#{user.contact_details.city}," +
"#{user.contact_details.region}, "
end
找不到地区或城市。
答案 0 :(得分:1)
我认为正在发生的事情user.contact_details
正在返回nil
。
这将允许第一次插值工作,因为"#{nil}"
只返回一个空字符串。
但是,在第二个示例中,当您致电user.contact_details.city
和user.contact_details.region
时,您正在调用city
上的方法region
和nil
,因此错误。
您可以使用安全操作符来解释这一点,以返回空字符串,即
user.contact_details&.city
# or in older Ruby versions
user.contact_details.try(:city)
是否要在关联存在时返回空字符串取决于您,但是,如果您不希望它们添加,则可以执行以下操作:
result_string = user.id.to_s
if user.contact_details.present?
result_string += "#{user.contact_details}," +
"#{user.contact_details.city}," +
"#{user.contact_details.region}, "
end
result << result_string
最后,如果您希望contact_details
出现,问题可能在于他们创建并附加到user
模型 - 如果是这种情况,我建议您查看你是如何做到这一点的,如果你不能让它发挥作用,用相关信息打开一个新问题。
希望有所帮助 - 如果您对此有任何疑问,请告诉我。
答案 1 :(得分:0)
我用礼物解决了这个问题?方法然后将三元运算符放在代码中,为没有提供联系人详细信息的用户提供无适用的消息。无需添加包含或连接:
User.where(user_type: :lender).all.each do |user|
result <<
"#{user.id}, " +
"#{user.contact_details.present? ? user.contact_details.country : ' N/A '}," +
"#{user.contact_details.present? ? user.contact_details.region : ' N/A ' }," +
"#{user.contact_details.present? ? user.contact_details.city : ' N/A '}"
end