Лучший способ добавить идентификатор / класс в Rails link_to?

#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 может быть сбит с толку синтаксисом в нечетных случаях, подобных тому, который вы там представили. В основном это связано с тем фактом, что в большинстве случаев это очень упрощенный способ, поскольку скобки необязательны, а на большинстве других языков они обязательны. Приятно слышать, что у вас это сработало.