2011-05-20 43 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

相关问题