it-swarm.com.de

Das Hinzufügen einer Klasse zu einem link_to unterbricht den Link

Ich verwende link_to in RoR 3

Wenn ich es so benutze, funktioniert es gut:

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

Aber ich möchte auch in einer Klasse bestehen

dies funktioniert jedoch nicht für mich. Die Klasse funktioniert, aber die Verknüpfung wird unterbrochen. Irgendwelche Ideen?

<%= 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"}  %>

versuche dies

<%= 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" }  %>

Da die Klasse: in: html_options sein sollte (unter Bezugnahme auf API)

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

Die richtige Vorgehensweise ist wie folgt:

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

Was das manuelle Einstellen des Controllers und der Aktion angeht, ist es Mist. Rails erstellt URL-Helfer für Sie; verwenden Sie diese und sparen Sie sich gleichzeitig Zeit, Energie und Klarheit:

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

Was Sie mit der String-Interpolation machen, ist ebenfalls eine schlechte Idee. Es ist einfach verschwenderisch und völlig grundlos. Folgendes ist das gleiche, nur besser:

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

Was den Grund angeht, warum Ihr Link nicht funktioniert hat, klingt es, als hätten Sie ein Problem mit Ihrer HTML-Struktur, nicht mit der link_to-Syntax, wenn Sie ihn in ein div packen.

32
coreyward

Ich verwende einen link_to do-end-Block, daher haben die obigen vorherigen Lösungen bei mir nicht funktioniert.

Wenn Sie andere Tags in ein Tag einbetten möchten, können Sie den link_to do-end-Block verwenden.

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

In diesem Fall ist es

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

Seien Sie vorsichtig, da in Rails 5 die obigen Methoden immer noch zu einer falschen URL-Generierung führen. Der Controller und die Aktion müssen in einen Literal-Hash eingefügt werden, damit sie in Rails 5 funktionieren

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