2014-07-12 3 views
0

В моем приложении Rails у меня есть модель под названием Video, и у каждого видео есть rating:integer. Рейтинги от 1 до 5. Однако, когда я показываю их пользователю, я хочу, чтобы они выглядели красиво. Итак, теперь, используя текст, я заменю рейтинг 3 на ***.., например.Как очистить данные от модели и включить также HTML?

В моей video.rb я получил:

def graphical_rating 
    stars = '' 
    no_stars = '' 

    rating.times { stars += '*' } 
    (5 - rating).times { no_stars += '.' } 

    return stars + no_stars 
end 

Теперь я хочу, чтобы добавить некоторые HTML к нему, так что он выводит <span class="stars">***</span><span class="no-stars">..</span>, но он выдает в виде текста, а не HTML.

Каков наилучший способ справиться с этим, чтобы он все еще был таким же простым, как и раньше (я мог бы просто использовать video.graphical_rating), имея возможность также включать HTML?

+0

Вам не нужно 'return' на последней строке метода. Возвраты подразумеваются в Ruby. 'stars + no_stars' будет возвращен без возврата. –

+0

Да, я знаю, но для меня больше смысла возвращаться. – Gary

+0

Не имеет значения, имеет ли это смысл для вас. Это соглашение Ruby не возвращается. Всегда предполагайте, что другие разработчики в конечном итоге будут работать с вашим кодом. Работая в Ruby или на любом языке, вы каким-то образом вносите свой вклад в сообщество, и вы будете разочаровывать других разработчиков только в том случае, если вы везде используете утверждения return. Прочтите [руководство по стилю] (https://github.com/bbatsov/ruby-style-guide). Придерживайтесь условностей языка/рамки, в которой вы работаете, и вы сбережете себе несколько головных болей (особенно когда речь заходит о чтении кода других людей). –

ответ

1

Этот метод фактически принадлежит вашему файлу VideoHelper, поскольку он применим только к вашим представлениям, а не к логике модели.

Это должно работать:

def graphical_rating(rating) 
stars = '' 
no_stars = '' 

rating.times { stars += '*' } 
(5 - rating).times { no_stars += '.' } 

return raw("<span class='stars'>#{stars}</span><span class='no-stars'>#{no_stars}</span>") 
end 

Затем в окне вы можете назвать его:

<%= graphical_rating(@video.rating) %> 
+0

Спасибо, я сделал это, работает. Хотя мне нравится «простота» '@ video.graphical_rating'. – Gary

Смежные вопросы