Pass select_tag value to load query in the same view rails

I know this question has been answered before, but none of the methods had worked for me.

I have a view with a select_tag that loads options from my database.
<%= select_tag :nom, options_from_collection_for_select(Usuario.all, :id, :tienda), prompt: "Seleccionar tienda" %>

then, I use a link_to <%= link_to("Cargar", :action => 'rel') %><br>to load the query on my controller

def rel
@nom = params[:nom]
@tie = Av.find_by_sql(["SELECT * FROM avm.avs where usuario_id in(select id from avm.usuarios where tienda = ?)", @nom])
render('rel')

The problem is that when I select any value on my select_tag it does not pass that value and sets the value to nil...

I also used a collection_select and doesn't work either. <%= collection_select(:tienda, :tienda, Usuario.all, :id, :tienda)%>

I really broke my head off trying to figure out why. Thanks in advance!

Upvotes: 0

Views: 115

Answers (2)

taglia
taglia

Reputation: 1847

I think you should put the select_tag in a form_tag block, and use submit_tag instead of link_to. If you just use a link no parameters will be passed to the controller (hence you get nil).

Something like:

<%= form_tag action: 'rel' do %>
    <%= select_tag :nom, options_from_collection_for_select(Usuario.all, :id, :tienda), prompt: "Seleccionar tienda" %>
    <%= submit_tag 'Cargar' %>
<% end %>

Just be mindful that this approach is not safe as there is no authenticity token verification.

Upvotes: 1

Inpego
Inpego

Reputation: 2667

Use form_tag:

<%= form_tag action: rel do %>
  <%= select_tag :nom, options_from_collection_for_select(Usuario.all, :id, :tienda), prompt: "Seleccionar tienda" %>
  <br>
  <%= link_to("Cargar", '#', onclick: 'this.parentNode.submit(); return false') %>
<% end %>

Hint: replace find_by_sql by Arel:

@tie = Av.where("usuario_id IN (#{Usuario.select('id').where('tienda = ?', @nom).to_sql})")

Upvotes: 2

Related Questions