Join query in rails

Hi.. how i should write the below query in rails.i found through mysql tutorial.i m not pro in rails ..so give some lights....

SELECT * FROM contactinfo join userinfo on contactinfo.contact_id = userinfo.id where contactinfo.user_id = 25

Thanks in advance

It would all depend on the models you're using. That db schema is not technically Rails friendly in that the table names should be user_infos and contact_infos resulting in models named UserInfo and ContactInfo Then you could use the following:

model ContactInfo   has_one :user_info   #or has_many :user_infos end

model UserInfo   belongs_to :contact_info end

and then...

contact_info = ContactInfo.new 25 user_info = contact_info.user_info

Rails deals with all the sql in the background :slight_smile:

Andrew Timberlake http://ramblingsonrails.com http://www.linkedin.com/in/andrewtimberlake

"I have never let my schooling interfere with my education" - Mark Twain

Newb Newb wrote:

Hi.. how i should write the below query in rails.i found through mysql tutorial.i m not pro in rails ..so give some lights....

SELECT * FROM contactinfo join userinfo on contactinfo.contact_id = userinfo.id where contactinfo.user_id = 25

Thanks in advance

@contactinfo= Contactinfo.find(:all, :joins => "contactinfos inner join userinfos as u on contactinfos.contact_id=u.id", :conditions => ["contactinfos.contact_id =?", 25])

Priya Buvan wrote:

Newb Newb wrote:

Hi.. how i should write the below query in rails.i found through mysql tutorial.i m not pro in rails ..so give some lights....

SELECT * FROM contactinfo join userinfo on contactinfo.contact_id = userinfo.id where contactinfo.user_id = 25

Thanks in advance

@contactinfo= Contactinfo.find(:all, :joins => "contactinfos inner join userinfos as u on contactinfos.contact_id=u.id", :conditions => ["contactinfos.contact_id =?", 25])

Thanks for the reply.. using this query i can able to get only the contactinfo table fields but i want to get userinfo table fields as well as contactinfo fields also...

how can i get that.. pls guide me on this

Don't think of merging them into one result set, think of them as two seperate sets of data (or models) that are related. That's the way Rails treats the data and it works very well.

I understand that you're new to Rails but take some time to get to understand Rails way of doing things and your life will be much easier.

Andrew Timberlake http://ramblingsonrails.com http://www.linkedin.com/in/andrewtimberlake

"I have never let my schooling interfere with my education" - Mark Twain

i think this is the way you should write like this… as i am also new to rails

ContactInfo.find(:all, :join => user_info)

You can use :select option in the same query..

Priya Buvan wrote:

You can use :select option in the same query..

yes priya i used but i get error ...it gives me unknown column

could you give the sample

@contactinfo= ContactInfo.find(:all,:select => "userinfo.first_name,contactinfo.user_id", :joins => "contactinf inner join userinfo as u on contactinfo.contact_id=u.id", :conditions => ["contactinfo.user_id=?", 25])

pls help me ya

Thanks

why don't you use the build options in the framework? specify the joins / relations in the model. Then do @user = User.find(params[:id]) (controller)

View: <=% @user.contactinfo.telephone %>

or <% for user in @users do |t| %> <%= t.contactinfo.telefone %> <%= t.contactinfo.fax %>

If you cant to do other types of joins, use the include option in the controller.