Объединяет запросы в Ruby on Rails - PullRequest
0 голосов
/ 18 мая 2018

Привет. Я пытаюсь выполнить запрос на соединение в rails.Я пытаюсь вывести определенные данные из моей модели User, а также получать данные из моей модели 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

Не могу найти регион или город.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Я решил это, используя подарок?метод, а затем помещая троичные операторы внутри кода в неприменимое сообщение для пользователей, которые не предоставили контактную информацию.Не было необходимости добавлять включения или объединения:

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 
0 голосов
/ 18 мая 2018

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

Надеюсь, что это поможет - дайте мне знать, если у вас есть какие-либо вопросы по этому поводу.на все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...