Rails: отключение ссылки link_to не работает, но скрытая ссылка link_to работает

Метод link_to не отключен: -

<%= link_to edit_cabinet_path(object), remote: true, disabled: true do %>
      <span class="glyphicon glyphicon-pencil"></span>
<% end %>  

но если мне нравится ниже, который скрывает ссылку

<%= link_to edit_cabinet_path(object), remote: true, style: "display:none;" do %>
      <span class="glyphicon glyphicon-pencil"></span>
<% end %>  

Теперь вопрос в том, как отключить этот тип ссылки с блоком, и по какой причине второй код работает, а первый нет.


person codemilan    schedule 20.11.2015    source источник
comment
Ваша первая ссылка не работает, потому что мы не можем использовать disabled: true в html-ссылках. Ваш второй код скроет вашу ссылку, потому что вы установили свойство display: none css, поэтому он не отключит ссылку, а скроет ее.   -  person przbadu    schedule 09.10.2018


Ответы (4)


Вероятно, вы ищете link_to_if. link_to_if делает вашу ссылку доступной только в том случае, если ваше условие выполнено.

Ваш код должен быть примерно таким:

<%= link_to_if false, edit_cabinet_path(object), remote: true do %>
      <span class="glyphicon glyphicon-pencil"></span>
<% end %> 

Чтобы сделать его динамическим, вы можете вызвать условие, которое удовлетворяет активному или неактивному действию этой ссылки, например:

<%= link_to_if cabinate.active?, 
               "<span class='glyphicon glyphicon-pencil'></span>".html_safe, 
               edit_cabinet_path(object), remote: true %>

Надеюсь, это ответ на ваш вопрос ..

person przbadu    schedule 21.11.2015

На самом деле атрибут disabled не доступен для link_to, только для тега button_to.

Для получения дополнительной информации см. здесь: http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

В этом случае вы можете использовать link_to_if, пожалуйста, ознакомьтесь с этим: http://apidock.com/rails/v4.2.1/ActionView/Helpers/UrlHelper/link_to_if

person Long Nguyen    schedule 20.11.2015
comment
если да, то почему этот код работает ‹%= link_to Complete install, process_work_detail_cabinets_path(work_order: work_order_id, work_detail: work_detail_id), method::post, class: btn btn-sm btn-primary progasket pull-right, id: change_work_detail_install, disabled: истинный %> - person codemilan; 20.11.2015
comment
что вы подразумеваете под этим кодом работает? это скрыто от страницы или вы можете видеть, но при нажатии ничего не происходит? - person Long Nguyen; 20.11.2015
comment
вы упомянули, что отключенный attr. недоступен для тега link_to только для тега button_to, но упомянутый выше в моем комментарии метод link_to имеет отключенный атрибут attr. работающий. Ссылка не скрыта, только отключена. - person codemilan; 20.11.2015
comment
Я не знаю, как это может работать? Но я думаю, что link_to_if — это то, что вам нужно :) Пожалуйста, посмотрите здесь: apidock.com/rails/v4.2.1/ActionView/Helpers/UrlHelper/ - person Long Nguyen; 20.11.2015

Я написал несколько простых JS, чтобы вы могли добавить метод disabled: true к link_to

  //this allows us to use html disabled attribute in rails
  //to prevent clicking on a disabled link from doing anything
  $('a[disabled]').click(function(e){
    e.stopImmediatePropagation()
    e.preventDefault();
  });
person Sami Birnbaum    schedule 07.01.2021

link_to_if не работает должным образом. Он отображает данный блок только в том случае, если ваше условие ложно в качестве запасного варианта.
https://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to_if#1589-Passing-a-block-ведетсебянетак,какожидалось

В моем случае я сделал Proc для данного блока

<%link_block = Proc.new{%>
<span class="glyphicon glyphicon-pencil"></span>
<%}%>
<%if condition?%>
<%= link_to edit_cabinet_path(object), remote: true, disabled: true, &link_block%>
<%else%>
<%link_block.call%>
<%end%>
person andylee    schedule 07.07.2020