#ruby-on-rails #ruby-on-rails-3 #helpers
#ruby-on-rails #ruby-on-rails-3 #помощник
Вопрос:
Новинка в Rails… Я создал помощник для форматирования названий гонок и их дат. Мне нужно передать, :id => "current-race"
если условие присутствует (в основном, если событие происходит сейчас). Как я мог бы это сделать?
def formatted_race_dates(race)
link_to (race.homepage) do
raw("<strong>#{race.name}</strong> <em>#{race_dates_as_string(race)}</em>")
end
end
теперь, когда race.start_date < Date.today amp;amp; race.end_date > Date.today
я хотел бы добавить id="current-race"
к ссылке.
Обычно я бы настроил условие if / else и отформатировал его двумя способами. Но, кажется, должен быть какой-то неизвестный мне Ruby-трюк, чтобы упростить что-то как обычное добавление идентификатора / класса к одному link_to
в списке? Даже без условия я не совсем уверен, куда / как добавлять :id => "current-race"
.
Я не знаю так много трюков с Ruby / Rails … все помогает!
Ответ №1:
link_to
Метод принимает опции именно по этой причине:
link_to(race.homepage, :id => 'current-race') do ...
Вы даже можете добавить условия для его выборочного запуска:
link_to(race.homepage, :id => (race.start_date < Date.today amp;amp; race.end_date > Date.today) ? 'current-race' : nil) do ...
Вы даже можете свернуть это, если у вас есть метод для Race, который указывает, является ли он текущим:
link_to(race.homepage, :id => race.current? ? 'current-race' : nil) do ...
Это легко реализовано в вашей модели и может быть использовано в других местах:
def current?
self.start_date < Date.today amp;amp; self.end_date > Date.today
end
Наличие этого в модели значительно упрощает тестирование.
Комментарии:
1. хммм. простое добавление
:id => 'current-race'
(то же, что и в вашем первом примере) прерывает работу приложения:/app/helpers/races_helper.rb:12: syntax error, unexpected ',', expecting ')' link_to (race.homepage, :id => 'current-race') do
2. хм.
link_to (race.homepage, :id => ...
сбой во времяlink_to(race.homepage, :id => ...
работы. ноlink_to (race.homepage)
также работает!?! Один паршивый пробел . что было бы ожидаемо на любом другом языке. Одной из самых сложных частей Ruby / Rails для меня является тот факт, что она мягкая… на мой взгляд, это сложнее в освоении. c’est la vie…3. Анализатор Ruby может быть сбит с толку синтаксисом в нечетных случаях, подобных тому, который вы там представили. В основном это связано с тем фактом, что в большинстве случаев это очень упрощенный способ, поскольку скобки необязательны, а на большинстве других языков они обязательны. Приятно слышать, что у вас это сработало.