Syntax with link_to using block, remote, parameters and class/id

Rails 3rc, Ruby 1.9.2

Newish to rails; very new to rails3

I'm trying to create a link using a block so I can wrap the name contents in a span, for an ajax request using multiple parameters and finally, also specifying the class and id of the generated link element. Here's what I've got so far:

<%= link_to(
      :url=>{
        :controller => 'themes', :action => 'remove_tag',
        :entity_id => entity_id, :theme_id => theme_id,
        :entity => entity, :element_id => element_id, :parent_id=>parent_id
      },
      :remote => true,
      :id => "theme-tag-#{entity}-#{entity_id}",
      :class => "tag") do %>
  <span class='subtract'><%= tag %></span>
<% end %>

This generates the following:

<a href="/explore/index/theme-tag-user-3?url[controller]=themes&amp;url[action]=remove_tag&amp;url[entity_id]=3&amp;url[theme_id]=16&amp;url[entity]=user&amp;url[element_id]=filter-contributor-3&amp;url[parent_id]=filter-contributors&amp;remote=true&amp;class=tag"><span class="subtract">Test Descriptor</span></a>

So, the href isn't correct, no class or id attributes as they're being treated like parameters instead, and normally with :remote=>true, I'd expect to see data-remote=true in the element. Also, and this is just my desire to learn more about why... but a link_to without a block would be something like link_to "Link Name", {url_stuff...}, :remote=>true, :class="my-class", :id=>"1" and so on, and these all work, but why do I have to specify the :url=> when using the block, but not otherwise? It just seems there's a significant syntactical difference between the two and I don't understand why there would be and I'd like to. Thanks.

Bill

1 Like

change :url to url_for

change :url to url_for

Thanks, that did it. Man, that was most frustrating;-)

yeah, you were passing a hash and not a helper method