Rails: решите визуализировать конкретное изображение на основе записи в базе данных - PullRequest
0 голосов
/ 24 октября 2011

Я относительно новичок в Rails и сейчас создаю демонстрационную доску.

Существуют темы, на которые пользователи могут отвечать.Опубликованное мнение имеет голос: положительный, отрицательный или нейтральный.Они выбраны флажком.

В показе тем - просмотр, вы можете увидеть уже опубликованные мнения.Для каждого мнения должно быть предоставлено изображение большого пальца вверх / вниз / нейтральное.

Сейчас я использую HAML и formtastic для новой формы мнения:

    =f.input :vote, :as => :radio, :label => "Your vote", |
:collection => [["positive","/images/Thumbs-up-icon.png"],["negative","/images/Thumbs-down-icon.png"],["neutral","/images/Thumbs-neutral-icon.png"]] |

Важноечасть тематического шоу выглядит следующим образом:

    - @opinions.each do |opinion|
[...]
        #opinion_vote
          = image_tag opinion.vote , {:height=>60}        

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

Я знаю, что это плохо на многих уровнях, но это единственное рабочее решение, которое я нашел до сих пор.Моя идея состояла в том, чтобы сохранить голоса в виде целых чисел, таких как 1 для положительного, 0 для нейтрального и -1 для отрицательного.Следующим шагом было бы иметь дело в моем представлении темы, чтобы решить, какое изображение должно быть визуализировано.Но логика снова плохая ...

Но как лучше всего найти подходящее место в Rails, чтобы решить, какой образ следует показывать?Контроллер темы?Модель мнения?Помощник?И наконец: как может выглядеть код;)?

Спасибо.

1 Ответ

0 голосов
/ 24 октября 2011

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

Мнение Модель

def neutral?
  if vote == 0
end

def positive?
  if vote == 1
end

def negative?
  if vote == 2
end

Мнение Помощник

def vote_image
  vote.positive? ? 'positive.png' : vote.negative? ? 'negative.png' : 'neutral.png'
end

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

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