【问题标题】:Better cleaner way to add ID/Class to Rails link_to?将 ID/Class 添加到 Rails link_to 的更简洁的方法?
【发布时间】:2011-08-29 20:47:10
【问题描述】:

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 &lt; Date.today &amp;&amp; race.end_date &gt; Date.today 我想将id="current-race" 添加到链接中。

我通常会设置一个 if/else 条件并以两种方式对其进行格式化。但似乎必须有一个我不知道的 Ruby 技巧来简化一些事情,比如将 id/class 常见添加到列表中的一个 link_to ?即使没有条件,我也不太确定在哪里/如何添加:id =&gt; "current-race"

这么多我不知道的 Ruby/Rails 技巧...一切都有帮助!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 helpers


    【解决方案1】:

    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 ...
    

    如果你有一个 Race 方法来指示它是否是当前的,你甚至可以折叠它:

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

    这很容易在您的模型中实现,并且可以在其他地方使用:

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

    将它包含在模型中可以大大简化测试。

    【讨论】:

    • 嗯。只需添加:id =&gt; 'current-race'(与您的第一个示例相同)会破坏应用程序:/app/helpers/races_helper.rb:12: syntax error, unexpected ',', expecting ')' link_to (race.homepage, :id =&gt; 'current-race') do
    • 嗯。 link_to (race.homepage, :id =&gt; ... 失败,而 link_to(race.homepage, :id =&gt; ... 有效。但是link_to (race.homepage) 也可以!?! 一个糟糕的空间。这在任何其他语言中都是可以预料的。对我来说,Ruby/Rails 最难的部分之一是它很宽大……在我看来,这使得学习变得更难。 c'est la vie...
    • Ruby 解析器在奇怪的情况下可能会混淆语法,比如您在此处公开的那种。这主要是因为它在大多数方面都非常轻松,因为括号是可选的,而在大多数其他语言中它们是必需的。不过,很高兴听到这对你有用。
    猜你喜欢
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多