Заменить содержимое рубинового фрагмента другим контентом из той же записи - PullRequest
0 голосов
/ 24 июня 2019

Следующий вызов необходим для генерации JavaScript для сторонней библиотеки.

@items = Item.where('id IN (?) AND  type_id = ?', @all_valid_items, 1).all
@records = @items.map{|a| a.slice('brand', 'producer', 'title')}

Ниже приведен модельный метод для генерации желаемой строки, которая должна генерироваться вместо одних только данных атрибута title.

def title_text
  "#{title}<br />#{main_text}"    
end

Однако расширение этой логики на метод слайса как

@records = @items.map{|a| a.slice('brand', 'producer').merge({'title' => a.title_text.join})}

возвращает undefined method 'title_text' for #<Item: как при использовании

@records = @items.map{|a| a.slice('brand', 'producer').merge({'title' => a.values_at('title','main_text').join})}

a.values_at возвращает undefined method 'values_at' for #<Item:

Каков правильный синтаксис для генерации модифицированной строки?

1 Ответ

1 голос
/ 24 июня 2019

Попробуйте следующий код для объединения ваших данных:

@items.map{ |a| a.slice(:brand, :producer, :title).merge(title: a.title_text.html_safe) }

.html_safe эквивалентно raw(some_string), и вы можете использовать его в модели или контроллере.

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