2010-06-28 1 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 %> 

Обратите внимание, что я должен положить, если условие, чтобы убедиться, что </a> не приходит в моем HTML, когда условие не выполняется. Это выглядит плохо. Можете ли вы предложить мне лучший способ сделать это?

link_to_if многообещающий, но затем он хочет, чтобы я поместил текст текста ссылки в параметр, который в моем случае является большим <div>.

ответ

4

Я попробовал несколько различных случаев, и это работает (не соединятся, если передать параметр: если => ложно, создаст ссылку, если вы передаете: если => верно, или если вы не передать, если параметр вообще)

Define помощника:

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

+0

это действительно классный фрагмент кода. спасибо Joshua – sameera207

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

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

Эй, Самера ... Спасибо за ответ. Проблема в том, что link_to текст («facebook» в вашем ответе) на самом деле большой

....
, у которого был html + erb-контент. Так что я не мог использовать что-то вроде этого. Цените, что поможете хотя :) Спасибо! – Garfield

+0

Привет, Тогда попробуйте что-то вроде этого, создать вспомогательный метод Защиту my_link <создать свой HTML + Еврорадио Примечание: создать ссылку также внутри этой> конец Ex: Защиту my_link "

Это огромный текст и имеет длинную строку, но он работает как ссылка также, если нажать»+ here +„

“ конца и назвать его, как этот <% = ((х == 5)? (my_link: '')%> Идея здесь добавить сложность помощника приветствий Sameera – sameera207

+0

Пожалуйста, всегда проверяйте окно предварительного просмотра перед отправкой поста - этот код был в основном невидимым для читателей. – halfer

 Смежные вопросы

  • Нет связанных вопросов^_^