search select 2 tabelas

43 views
Skip to first unread message

Marcos Vinicius Schwaab

unread,
Nov 11, 2009, 2:12:33 PM11/11/09
to rails-br
Olá pessoal tenho 3 tabelas

order stat tecnic

order
number
desc
stat_id select... (name)
tecnic_id select... (name)

na minha search


<h1>Busca</h1>

<% form_tag search_path, :method =>'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Busca", :stat_id => nil %>
</p>
<% end %>



search.rb

def search
if params[:search]
@orders = Order.find(:all,:limit => 10, :conditions => ['stat_id
LIKE ?', "%#{params["search"]}"])




como posso fazer um select que mostre não o stat_id mas sim o
stat.name e o tecnic.name .

seria uma busca em 2 tabelas diferentes e mostrando um select dinamico
que aparece o name e nao o id de cada tabela!





ficaria assim:


select [name]
[name]
[name]

Catón

unread,
Nov 11, 2009, 4:06:25 PM11/11/09
to rail...@googlegroups.com
1. Não estou dizendo que você está fazendo isso, mas é legal você entender bem os conceitos de MVC pra não trocar as coisas de lugar.

2. Order.find(:all) pode ser substituido por Order.all pra ficar mais limpo.

3. Se você estiver usando os belong_to and has_many direitinho, você pode resolver o seu problema assim:

#Controller
@orders = Order.all(:conditions => ['stat_id LIKE %?', params[:search]], :limit => 10)

#View
orders.stat.name
orders.tecnic.name


4. Se por acaso você não puder usar isso, tente:

#View
Stat.find(orders.stat_id).name
Tecnic.find(orders.tecnic_id).name


5. Procure ler sobre named_scopes. Eles ajudam muito, além de deixar o seu código muito mais bonito.

6. Rails Guides é seu amigo: http://guias.rubyonrails.pro.br/



Lucas Catón
Software Developer
http://blog.lucascaton.com.br/


2009/11/11 Marcos Vinicius Schwaab <marcos....@gmail.com>

Marcos Vinicius Schwaab

unread,
Nov 12, 2009, 5:50:53 AM11/12/09
to rails-br
Lucas obrigado por responder, mas até ai está certinho eu tenho um
controller search

eu preciso só fazer um select com a tabela stat e tecnic que aparece o
campo name ex:

search.html.erb

stat [name]
[name]
[name]


submit.search


só que o problema é que estou buscando na tabela order
belongs_to :stat e :tecnic

pelo meu código acima eu consigo colocar digamos o número 1 que é o
stat_id ele busca corretamente:
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Busca", :stat_id => nil %>

mas eu quero um select com o stat campo name e não o stat_id .

Aline Fernanda Paulino

unread,
Nov 12, 2009, 7:49:33 AM11/12/09
to rail...@googlegroups.com

assim q vc quer?
faze a busca no order mais podendo buscar pelos campos estrangeiros?
se for eh assim

@orders = Order.find(:all, :conditions => ["stats.name like ? or tecnics.name like ?", params[:busca], params[:busca]],
:joins => "INNER JOIN stats ON stats.id = orders.stat_id
INNER JOIN tecnics ON tecnics.id = orders.tecnic_id")



●๋• αℓιηє Fєяηαηdα•๋●


2009/11/12 Marcos Vinicius Schwaab <marcos....@gmail.com>

Marcos Vinicius Schwaab

unread,
Nov 12, 2009, 10:23:32 AM11/12/09
to rail...@googlegroups.com
Deixa eu tentar explicar

eu tenho um controller search.erb


eu so quero fazer um select que me liste o campo name (stats)

só que eu estou no controller search.erb
já está funcionando com o:


        <%= text_field_tag :search, params[:search] %>
        <%= submit_tag "Busca", :stat_id => nil %>

se eu digitar 1   ele vai buscar todos as orders que estão com o stat_id 1
________________________________________________________________________

eu quero que ele puxe a lista de stat automatico listando o campo name
LEGENDA:
stat_id é o campo na tabela order  
teste1 é o campo name da tabela stat


search.html.erb


name (stat)         stat_id(order)
teste1                  (1)    
teste2                  (2)
teste3                  (3)
  [BUSCAR]




 def serach
      if params[:search]
      @orders = Order.find(:all,:limit => 10, :conditions => ['stat_id LIKE ?', "%#{params["serach"]}"])




Catón

unread,
Nov 12, 2009, 11:07:23 AM11/12/09
to rail...@googlegroups.com
Por convensão, search.erb deveria ser o nome do seu model e search_controller.erb sim deveria ser seu controller, mas enfim...



Lucas Catón
Software Developer
http://blog.lucascaton.com.br/


2009/11/12 Marcos Vinicius Schwaab <marcos....@gmail.com>
Deixa eu tentar explicar

Marcos Vinicius Schwaab

unread,
Nov 12, 2009, 11:17:44 AM11/12/09
to rail...@googlegroups.com
desculpa esqueci de por o _controller.erb no final!


Catón

unread,
Nov 12, 2009, 11:41:44 AM11/12/09
to rail...@googlegroups.com
Estou achando que o seu problema não é no controller, é na view!
Verifica se é isso o que você quer:

<%= f.select :stats, Stat.all.collect {|stat| [stat.id, stat.name] } %>




Lucas Catón
Software Developer
http://blog.lucascaton.com.br/


2009/11/12 Marcos Vinicius Schwaab <marcos....@gmail.com>
desculpa esqueci de por o _controller.erb no final!






Reply all
Reply to author
Forward
0 new messages