Отображение виртуальных атрибутов, которых нет в базе данных, в шаблоне представления - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь отобразить информацию о шаблоне представления не в базе данных, а выведена из логики, но у меня это не работает.

Вот что я сделал:

модели

class SignupHistory < ActiveRecord::Base

  attr_accessor(:device)

  def device_used # This method returns the device used from User-Agent and mapped as either Desktop or Mobile
    device = "#{request.headers["User-Agent"].match(/\(.*?\)/)[0].split('(')[1].split(';')[0]}"
    [:Macintosh, :Windows, :Linux, :Unix].include?(device) ? 'Desktop' : 'Mobile'
  end
end

представление шаблона

.row
  .panel.panel-primary
    .panel-heading
      span = t('admin_header.traffics')
    .panel-body
      = table_for(@traffic, class: 'table table-condensed table-hover') do |t|
        - t.column :device, 'Devise Used', class: 'col-xs-2' # I want to output the returned value in device_used method here.

Я не хочу создавать новый атрибут в базе данных, я просто хочу показать, чтообъект в представлении для всех записей в базе данных.

Как видно из изображения ниже, он должен показывать результат метода device_used, но ничего не показывает template view picture

1 Ответ

0 голосов
/ 19 сентября 2018
class SignupHistory < ActiveRecord::Base

  attr_accessor(:device)

  def device_used # This method returns the device used from User-Agent and mapped as either Desktop or Mobile
    device = "#{request.headers["User-Agent"].match(/\(.*?\)/)[0].split('(')[1].split(';')[0]}"
    [:Macintosh, :Windows, :Linux, :Unix].include?(device) ? 'Desktop' : 'Mobile'
  end

device в вашем методе device_used является локальной переменной, которая недоступна так, как вам нужно, attr_accessor в этом случае аналогичен записи этого, поэтому ваш столбец пуст

def device
end

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

alias_method :device, :device_used

...