#css #ruby-on-rails-3
#css #ruby-on-rails-3
Вопрос:
Тег span в настоящее время выглядит следующим образом:
<span class='best_in_place<%= ' list-downvoted' if upload.downvoted? %><%= ' list-upvoted ' if upload.upvoted? %>'
Однако, если за этот диапазон одновременно проголосовали с понижением и с повышением, то применяются оба стиля.
Как мне изменить это, чтобы применять только одно, и избавиться от другого, если другое существует?
т.е. если за этот элемент ранее голосовали с понижением, удалите list-downvoted
класс, и наоборот.
Редактировать: Добавлен рекомендуемый код в моем UploadsHelper
module UploadsHelper
def best_span_class_for_upload(upload)
# Start with the base style
css_class = 'best_in_place'
# Add on any conditional styles using String#<< concatenation
css_class << ' list-downvoted' if (upload.downvoted?)
css_class << ' list-upvoted' if (upload.upvoted?)
# Return the result
css_class
end
end
Теперь span выглядит вот так:
<span class='<%= best_span_class_for_upload(upload) %>' id='best_in_place_upload_name' data-url='<%= upload_path(upload) %>' data-object='upload' data-attribute='name' data-formType='input' data-activator='span#upload-edit-name-<%= upload.id %>'><%= upload.name %></span>
Ответ №1:
Возможно, было бы лучше включить вспомогательный метод, чтобы избежать создания беспорядка в вашем шаблоне:
<span class='<%= best_span_class_for_upload(upload) %>'>
Тогда вспомогательный метод, определенный в helper/
определенном модуле, будет выглядеть следующим образом:
def best_span_class_for_upload(upload)
# Start with the base style
css_class = 'best_in_place'
# Add on any conditional styles using String#<< concatenation
css_class << ' list-downvoted' if (upload.downvoted?)
css_class << ' list-upvoted' if (upload.upvoted?)
# Return the result
css_class
end
Обновить:
Исправленная версия, которая показывает только один из up или down:
def best_span_class_for_upload(upload)
# Start with the base style
css_class = 'best_in_place'
# Add on any conditional styles using String#<< concatenation
if (upload.downvoted?)
css_class << ' list-downvoted'
elsif (upload.upvoted?)
css_class << ' list-upvoted'
end
# Return the result
css_class
end
Комментарии:
1. будет ли это в ‘upload_helper’ ?
2. Кстати, это не работает. Я обновил вопрос с помощью кода, который я использовал. Может быть, я чего-то не понимаю?
3. Когда вы говорите «не работает», что вы имеете в виду? Ошибки? Вспомогательный метод должен создать простую строку на основе определенной вами логики. Представление просто использует этот же метод. Если вы помещаете это в представление, используемое UploadsController, тогда вы должны поместить это в связанный
app/helpers/uploads_helper.rb
.4. Извините, он применяет оба стиля — независимо от того, что было сделано раньше …. что было моим первоначальным вопросом. Что я хочу, чтобы это делало, так это то, что если текущий класс является
list-downvoted
иupload.upvoted?
истинным, он должен удалитьlist-downvoted
и добавитьlist-upvoted
. Как бы я это сделал с помощником?5. Вместо этого вы могли бы изменить это
if
—if
наif
—elsif
, и это должно сделать то, что вы хотите, в основном добавить одно или другое, но не оба.