2012-12-25 63 views
2

我已經在我的表擴展html類的推薦模式是什麼?

<% if user.company.nil? %> 
    <tr class="error"> 
<% else %> 
    <tr> 
<% end %> 
    <td><%= user.name %></td> 
</tr> 

以下<tr>標籤我想補充另一個if語句

<% if user.disabled? %> 
    <tr class="disabled"> 
<% end %> 

所以當兩個這樣的語句是true我希望收到:

<tr class="error disabled"> 

我知道我應該將其移至助手,但如何編寫擴展類的良好大小寫聲明取決於o這些陳述?

回答

0

你可以嘗試一個輔助方法,像

def user_table_row(user) 
    css = "" 
    css = "#{css} error" if user.company.nil? 
    css = "#{css} disabled" if user.disabled? 

    content_tag :tr, class: css 
end 

不知道有多好,這將在錶行的情況下工作,因爲你將要嵌套TD它

UPDATE內:這裏被更新版本屈服TD代碼塊

def user_table_row(user) 
    css = # derive css, using string or array join style 

    options = {} 
    options[:class] = css if css.length > 0 

    content_tag :tr, options do 
    yield 
    end 
end 

然後在視圖

<%= user_table_row(user) do %> 
    <td><%= user.name %></td> 
<% end %> 
+0

「#{} CSS錯誤」 ......您會收到類= 「錯誤」 –

2
def tr_classes(user) 
    classes = [] 
    classes << "error" if user.company.nil? 
    classes << "disabled" if user.disabled? 
    if classes.any? 
    " class=\"#{classes.join(" ")}\"" 
    end 
end 

<tr<%= tr_classes(user) %>> 
    <td><%= user.name %></td> 
</tr> 

但良好的作風是:

def tr_classes(user) 
    classes = [] 
    classes << "error" if user.company.nil? 
    classes << "disabled" if user.disabled? 
    if classes.any? # method return nil unless 
    classes.join(" ") 
    end 
end 

<%= content_tag :tr, :class => tr_classes(user) do -%> # if tr_classes.nil? blank <tr> 
    <td><%= user.name %></td> 
<% end -%> 
+0

'content_tag:TR' 給標籤與收盤: –

+0

看起來很酷,但嗯,我不喜歡這個''[] .tap''語法:)但現在最好的選擇,謝謝 – tomekfranek

+0

避免.tap如果你不喜歡它) –