Как отобразить ROR 5 ActiveRecord в виде строки в html.erb
В html.erb у меня есть:
<%= ContactDescribe.where(["contact_describe_id = ?", "12"]).limit(1).pluck(:borrower_or_lender_text) %>
Поле успешно восстановлено. Но возвращает элемент массива. Мне нужно узнать, как преобразовать этот элемент в строку.
3 ответа
Проблема здесь в том, что where
возвращает коллекцию - что-то похожее на массив, только в ActiveRecord - независимо от того, какое ограничение вы на него установили. Чтобы получить информацию, которую вы бы использовали .first
или же [0]
так как вы всегда возвращаете только один объект.
Но, так как вы ищете конкретный ContactDescribe
объект. Сделайте это вместо этого:
ContactDescribe.find_by(contact_describe_id: 12).borrower_or_lender
Кроме того, есть две вещи, которые вы должны улучшить в своем коде.
1: логика должна идти в контроллер или модель. Представление только здесь, чтобы показать объекты.
2: Что случилось с contact_describe_id
поле? Почему бы не назвать это id
, Это кажется излишним. не user.id
удобнее чем user.user_id
?
В дополнение к ответу Дипака вы также можете преобразовать Array
в строку "Приговор"
<%= ContactDescribe.where(contact_describe_id: 12).limit(1).pluck(:borrower_or_lender_text).to_sentence %>
Рекомендация:
Как отмечает TheChamp, рекомендуется уже "подготавливать" значения, необходимые в представлениях, в качестве переменных экземпляра из контроллера. Смотрите мой рекомендуемый рефактор
# controller def YOUR_ACTION_NAME @contact_describe = ContactDescribe.where(contact_describe_id: 12).first end # view <%= @contact_describe.borrower_or_lender_text %>
Примечание: вам даже не понадобится отрываться, если у вас нет других причин, почему вы хотите limit(1)
Вы можете использовать join
<%= ContactDescribe.where(contact_describe_id: 12).limit(1).pluck(:borrower_or_lender_text).join(',') %>