2011-05-20 50 views
3

New-ish to Rails ...我創建了一個幫手來格式化比賽名稱&他們的日期。如果有條件存在,我需要通過:id => "current-race"(基本上,如果事件正在發生)。我怎麼能解決這個問題?更好的更清潔的方式來添加ID /類到Rails link_to?

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 && race.end_date > Date.today我想補充id="current-race"的鏈接。

我通常會設置一個if/else條件並以兩種方式進行格式化。但似乎必須有一個Ruby技巧,我不知道如何簡化一些常見的添加id/class到列表中的一個link_to?即使沒有條件,我不太清楚在哪裏/如何添加:id => "current-race"

這麼多的Ruby/Rails技巧我不知道......一切都有所幫助!

回答

10

link_to方法需要選擇出於這個原因:

link_to(race.homepage, :id => 'current-race') do ... 

您甚至可以添加條件,有選擇性地觸發它:

link_to(race.homepage, :id => (race.start_date < Date.today && race.end_date > Date.today) ? 'current-race' : nil) do ... 

你甚至可以摺疊此,如果你有比賽的方法表明它是否是當前的:

link_to(race.homepage, :id => race.current? ? 'current-race' : nil) do ... 

這很容易imp可在其他地方使用:

def current? 
    self.start_date < Date.today && self.end_date > Date.today 
end 

讓它在模型中使測試變得更加容易。

+0

嗯。只添加':id =>'current-race''(與你的第一個例子相同)打破了應用程序:'/app/helpers/races_helper.rb:12:語法錯誤,意外',',期待')' link_to race.homepage,:id =>'current-race')do' – Meltemi 2011-05-20 18:41:04

+0

嗯。 'link_to(race.homepage,:id => ...'''雖然'link_to(race.homepage,:id => ...'工作,但'link_to(race.homepage)'也能工作!'! *一個糟糕的空間**,其他任何語言都會出現這樣的錯誤,Ruby/Rails最難的部分之一就是它是寬鬆的,這使得它在我看來很難學習。 la vie ... – Meltemi 2011-05-20 18:48:20

+0

Ruby解析器可能會在您遇到的那種奇怪的情況下感到困惑,這主要是因爲它在大多數方面都很放鬆,因爲括號是可選的,在大多數其他語言中但是,很高興聽到這對你有用。 – tadman 2011-05-20 19:23:50

相關問題