我应该将哪些代码放入rails中

时间:2013-02-22 12:34:37

标签: ruby-on-rails ruby ruby-on-rails-3.2 haml partial-views

理想情况下,可重复使用的代码,我们可以将其置于隔离部分,并可以通过不同的操作调用它。

现在,如果我的parial _list.html.haml文件有代码

 #betting_list
   %table.table
    %tr  
    %th{:align => "left"}="Start time"
    %th{:align => "left"}="Fixture"
    %th{:align => "left"}="Won"
    %th{:align => "left"}="Draw"
    %th{:align => "left"}="Lost"
    %th{:align => "left"}="Amount"
  - @upcoming_event.each do |event|
    %tr{:class => cycle('even', 'odd')}
      %td=event.start_at.strftime("%b %d %H:%M")
      %td=link_to event.name, event
      - event.outcomes.each do |outcome|
        - if outcome.label =="Won"
          %td=outcome.odds 
        - if outcome.label =="Draw"
          %td=outcome.odds 
        - if outcome.label =="Lost"
          %td=outcome.odds 
      %td=event.bets.count
= paginate(@upcoming_event)

我们是否应始终将数据行或循环保存在不同的部分或?中。我是在delimma。我不需要重用那个循环部分来重用。

有可能重构这样的代码吗?

2 个答案:

答案 0 :(得分:1)

您可以将循环更好地保留在新的部分中。

我也看到多重IF,有点令人困惑。

你可以这样做

- if (["Won","Lost","Draw"].include? outcome.label)
    %td=outcome.odds 

答案 1 :(得分:1)

对于不同的部分,这一切都取决于重用或可读性。一个正确命名的部分也可以帮助解释维护原因,特别是如果没有评论。

Case语句使它更具可读性。但这只是一种意见。

case outcome.label
when "Won", "Lost", "Draw"
  %td=outcome.odds
end