Как отобразить 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(',')  %>
Другие вопросы по тегам