2013-06-29 183 views
0

我如何在Rails中進行選擇?查詢Ruby on Rails?

SELECT Women.phone, Users.name FROM women, users WHERE (users.cellid = women.cell_id); 

模型/ user.rb

class User < ActiveRecord::Base 
    attr_accessible :cellid, :name 
    belongs_to :woman 
end 

模型/ woman.rb

class Woman < ActiveRecord::Base 
    attr_accessible :cell_id, :phone 
    has_many :users 
end 

控制器/ index.rb

def index 
    @variables = User.all 
    @phones = Woman.all 
end 

回答

0

你的SELECT語句意味着UserWoman由田小區id和單元ID聯繫在一起,所以你必須在你的belongs_tohas_many指令指定這些:

class User < ActiveRecord::Base 
    attr_accessible :cellid, :name 
    belongs_to :woman, foreign_key: :cellid, primary_key: :cell_id 
end 

class Woman < ActiveRecord::Base 
    attr_accessible :cell_id, :phone 
    has_many :users, foreign_key: :cellid, primary_kay: :cell_id 
end 

雖然這是可能的,它總是最好使用Rails的約定,並使用:id作爲主鍵和woman_id作爲外鍵,如果可能的話。

然後在你控制器,你可以這樣做:

@users= User.all 

,並在您的視圖:

<% @users.each do |user| %> 
    <%= user.name %> has woman with phone <%= user.woman.phone %> 
<% end %> 
+0

謝謝,工作正常! –

0

幾種方法可以做到這一點(我會選擇第二個選項去):

# First option 
User.find_by_sql('select Women.phone, Users.name from Women, Users where Users.cellid = Women.cell_id') 

# Second option 
User.joins(:women).where('Users.cellid = Women.cell_id').select(['Women.phone', 'Users.name']) 

在這兩種情況下,你會得到Users對象的數組將包含Women.phoneUsers.name屬性。

+0

你的第二選擇意味着'用戶'和'女性'通過id加入了正常的導軌方式。我在Oleg的示例SQL中看不到這個。 –

+0

@MartinM,你是對的,他們通過'id'加入了正常的導軌方式;有什麼不對嗎?我發佈了這個選項,因爲我比第一個選項更喜歡用這種方法寫查詢。 – vee

+1

你的回答是好的,我只是想指出其他人,這個例子中的sql snipets並不反映正常的rails方式。 –