Я думаю, что происходит то, что 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
- в этом случае я бы предложил иметьпосмотрите, как вы это делаете, и откройте новый вопрос с соответствующей информацией, если вы не можете заставить его работать.
Надеюсь, что это поможет - дайте мне знать, если у вас есть какие-либо вопросы по этому поводу.на все.