web-dev-qa-db-fra.com

l'ajout d'une classe à un link_to rompt le lien

J'utilise link_to dans RoR 3

Quand je l'utilise comme ça, ça marche bien:

<%= link_to "Add to your favorites list",:controller => 
            'favourite_companies', :action =>'create', 
            :company_id=>"#{@company.id}",   
            :company_name=>"#{@company.company_name}" %>

Mais je voudrais aussi passer un cours

cependant, cela ne fonctionne pas pour moi. La classe fonctionne, mais elle rompt le lien. Des idées?

<%= link_to "Add to your favorites list",{:controller => 
            'favourite_companies', :action =>'create'}, 
            :company_id=>"#{@company.id}",   
            :company_name=>"#{@company.company_name}",
            :class=>"ui-button-text button_text"}  %>
29
mtay
<%= link_to "Add to your favorites list",{:controller => 
            'favourite_companies', :action =>'create'}, 
            :company_id=>"#{@company.id}",   
            :company_name=>"#{@company.company_name}",
            :class=>"ui-button-text button_text"}  %>

essaye ça

<%= link_to "Add to your favorites list", :controller => 
            'favourite_companies', :action =>'create', 
            :company_id=>"#{@company.id}",   
            :company_name=>"#{@company.company_name}",
            { :class=>"ui-button-text button_text" }  %>

Étant donné que la classe: doit être dans: html_options (en référence à l'API)

link_to(body, url, html_options = {})
60
edthix

La bonne façon de faire ce que vous avez est la suivante:

link_to "Foo", { URL_FOR PARAMS HERE }, :class => "bar"

Pour ce qui est de régler le contrôleur et l'action manuellement comme ça, eh bien, c'est de la merde. Rails crée des assistants url pour vous; utilisez-les et économisez du temps, de l'énergie et ajoutez de la clarté, tout à la fois:

link_to "Foo", favourite_companies_path(@company), :method => :post

Ce que vous faites avec l'interpolation de chaînes est également une mauvaise idée ... c'est juste du gaspillage et encombré sans aucune raison. Ce qui suit est le même, mais en mieux:

link_to "Foo", :company_id => @company.id, :company_name => @company.name

En ce qui concerne la raison pour laquelle votre lien ne fonctionnait pas, si l'enrouler dans un div l'aidait, il semblerait que vous ayez un problème avec votre structure HTML, pas avec la syntaxe link_to.

32
coreyward

J'utilise un bloc link_to do-end donc les solutions précédentes ci-dessus n'ont pas fonctionné pour moi.

Si vous souhaitez intégrer d'autres balises dans votre balise a, vous pouvez utiliser le bloc link_to do-end.

<%= link_to favourite_companies_path(:company_id => @company.id, :another_url_param_here => "bar"), { :class => "ui-button-text button_text", :title=> "We can have more html attributes as well" } do %>
  <i class="fa fa-star"></i>
  <%= @company.company_name %>
<% end %>

Dans ce cas, c'est

<%= link_to path(url_params), html_options = {} do %>
<% end %>
7
Chris

Soyez prudent car dans Rails 5, les méthodes ci-dessus entraîneront toujours une génération d'URL incorrecte. Le contrôleur et l'action doivent être placés dans un hachage littéral pour fonctionner dans Rails 5. Ce que vous aurez devrait être quelque chose comme ça

<%= link_to "Add to your favorites list", 
        { controller: "favourite_companies", action:"create"}, 
        company_id: @company.id,   
        company_name: @company.company_name,
        class: "ui-button-text button_text"   %>
2
Kenigbolo