2010-06-28 98 views
2

當滿足特定條件時單擊某個元素時,我想要顯示一個facebox鏈接。 如果條件不滿足,我不希望用戶點擊。 我做這樣的事情來實現它,這是非常醜陋Rails:滿足條件時的Facebox鏈接

<% if x == 5 %> 
    <a id="something" href="http://www.some_weird_link.com" rel="facebox"> 
<% end %> 
<div> 
    <!-- Loads of HTML and erb code here which should be shown no matter what condition --> 
</div> 

<% if x == 5 %> 
    </a> 
<% end %> 

注意,我把一個if條件只是讓該</a>不來我的HTML當條件不滿足。這看起來很糟糕。 你能建議我做一個更好的方法嗎?

link_to_if是有希望的,但它希望我把鏈接顯示文本放在參數中,在我的情況下,這個參數恰好是一個大的<div>

回答

4

我嘗試了一些不同的情況,而這種工作(如果你通過選項不會鏈接:如果=>假,將創建鏈接,如果你傳遞:如果=>真實,或者如果你沒有通過,如果選擇的話)

定義幫手:

def facebox(*args , &block) 
    if !args.last.is_a?(Hash) || args.last.fetch(:if,true) 
     link_to *args , &block 
    else 
     block.call 
    end 
    end 

一旦你有幫助,你想用你的facebox鏈接方法(任何時候,你還不如與所有t充實他特別facebox論點 - 即相對,例如,很可能被移動到幫助清理你的看法)

然後你就可以在您的視圖做到這一點:

<% facebox 'http://www.some_weird_link.com' , :id => 'something' , :rel => 'facebox' , :if => (x == 5) do %> 
    <div> 
     <!-- Loads of HTML and erb code here which should be shown no matter what condition --> 
    </div> 
    <% end %> 
+0

非常感謝你約書亞....這真的很好..查看是如此乾淨。 – Garfield 2010-06-29 06:26:03

+0

這是一個非常酷的代碼片段。謝謝Joshua – sameera207 2010-06-29 08:03:26

1

嘗試

<%= "<a id='something' href='http://www.some_weird_link.com' rel='facebox'>" if x == 5 %> 
<div> 
    <!-- Loads of HTML and erb code here which should be shown no matter what condition --> 
</div> 


<%= " </a> " if x == 5 %> 
+0

謝謝......它比我有更好。但我想擺脫雙ifs .. – Garfield 2010-06-28 11:15:24

0

如果我明白你的問題正確的這應該是訣竅:

<%= ((x == 5) ? (link_to 'facebook', 'http://www.some_weird_link.com', :id => 'abc', :rel => 'facebox') : '') %> 

<div> 
    <!-- Loads of HTML and erb code here which should be shown no matter what condition --> 
</div> 
+0

嘿Sameera ...感謝您的回覆。問題是link_to文本(你的答案中的'facebook')實際上是一個很大的

....
,它有html + erb內容。 所以我不能使用這樣的東西。 雖然感謝您的幫助:)謝謝! – Garfield 2010-06-29 06:28:26

+0

嗨, 然後嘗試這樣的事情, 創建的helper方法 高清my_link <創建HTML +該局及注:也創造了這裏面的鏈接> 結束 例: DEF my_link 「

這是一個巨大的文本,它有一個很長的字符串,但如果你點擊」 + here +‘

’ 結束 並調用它像這樣 它的工作原理爲紐帶,也是<%=((x == 5)? (my_link:'')%> 這裏的想法是添加複雜的助手 歡呼 sameera – sameera207 2010-06-29 07:46:53

+0

請在提交後前經常檢查預覽窗口 - 此代碼爲絕大多數不以饗讀者。 – halfer 2017-04-30 07:29:15