web-dev-qa-db-ja.com

link_toにクラスを追加するとリンクが壊れます

RoR 3でlink_toを使用しています

このように使用すると、うまく機能します:

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

しかし、私もクラスに合格したいと思います

しかし、これは私にとってはうまくいきません。クラスは機能しますが、リンクが壊れます。何か案は?

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

これを試して

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

:classは:html_optionsにある必要があるため(APIを参照)

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

あなたが持っていることを行う適切な方法は次のとおりです。

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

このようにコントローラーとアクションを手動で設定する限り、それはがらくたです。 Railsは、URLヘルパーを作成します;それらを使用して、時間と労力を節約し、明快さを一度に追加してください:

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

あなたが文字列補間でやっていることも悪い考えです...それは無駄であり、理由もなくまったく散らかっています。以下は同じですが、ちょうど良いです:

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

リンクが機能しなかった理由に関しては、divでラップすることが助けになった場合、link_to構文ではなく、HTML構造に問題があるように聞こえます。

32
coreyward

私はlink_to do-endブロックを使用しているため、上記の以前のソリューションはうまくいきませんでした。

タグに他のタグを埋め込む場合は、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 %>

この場合は

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

Rails 5では、上記の方法でも間違ったURLが生成されるため注意してください。 Railsで機能するためには、コントローラーとアクションをリテラルハッシュに入れる必要があります。

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