2017-08-16 5 views
1

Pour une raison quelconque, ma ligne link_to_if fonctionne, mais apparaît dans toutes les vues de mon modèle (Société).Rails link_to_si vous ne masquez pas correctement les liens

Voici le code:

<% @customers.each do |customer| %> 
    <li> 
    <%= link_to_if customer.company_id == @company.id, "#{customer.first_name} #{customer.last_name}", customer_path(customer[:id]) %> 
    </li> 
<% end %> 

La question: Je Customer1 liée à CompanyX. Quand je vais à CompanyZ, il montre Customer1, mais le lien n'est pas un lien hypertexte. c'est juste en clair, et même pas censé être visible. Cependant, sur le point de vue de CompanyX, le lien fonctionne bien. Qu'est-ce que je fais mal ici?

Répondre

1

Si vous lisez la documentation de link_to_if (https://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to_if), il est dit clairement que [si elle est fausse] seul le nom est retourné.

Dans le document, vous pouvez constater que le bloc (facultatif) donné est rendu dans le cas false. Donc, dans votre cas, vous pouvez passer un bloc vide:

<%= link_to_if false, customer_path(customer[:id]) {} %> 

À mon avis, si vous voulez afficher le lien que si un ou plusieurs customer (s) de @customers sont associés à cette @company, vous devriez le faire de cette façon:

<% @customers.where(company_id: @company.id).each do |customer| %> 
    <li> 
    <%= link_to "#{customer.first_name} #{customer.last_name}", customer_path(customer[:id]) %> 
    </li> 
<% %> 
+0

Pour une raison quelconque le bloc vide ne fonctionnait pas, mais des docs 'link_to « Connexion », ... si @current_user .nil? 'travaillé pour moi. Merci. –

+1

@SamLim Je vous recommande fortement de jeter un coup d'œil à la deuxième partie de ma réponse car elle permettra d'économiser des performances. Faire un cycle sur tout le tableau '@ customers' uniquement pour afficher le' client' correspondant à '@ company' est une perte de performance. – MrYoshiji

+0

Oui, a parfaitement fonctionné! Merci beaucoup. En tant que Rails newb, et une question supplémentaire ... devrait ce type de logique dans la vue? –

1

si vous voulez cacher certains documents que vous pouvez faire à partir du contrôleur pour contrôler les clients société

@customers = Company.find(:id).customers 

alors votre point de vue, vous pouvez simplement montrer sans la comparer

<% @customers.each do |customer| %> 
    <li> 
    <%= link_to "#{customer.first_name} #{customer.last_name}", customer_path(customer[:id]) %> 
    </li> 
<% end %>