Rails: ссылка на Facebox, если условие выполнено - PullRequest
2 голосов
/ 28 июня 2010

Я хочу отобразить ссылку на 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>.

Ответы [ 3 ]

4 голосов
/ 28 июня 2010

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

Определите помощника:

  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 (который вы могли бы также использовать со всеми специальными аргументами Facebox - этот rel, например, мог бы быть перемещен в помощник для очистки ваш взгляд)

Тогда вы можете сделать это, по вашему мнению:

  <% 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 %>
1 голос
/ 28 июня 2010

Попробуйте

<%= "<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 голосов
/ 28 июня 2010

Если я правильно понял ваш вопрос, это должно сработать:

<%= ((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>
...