我如何在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 :(得分:0)
您的select语句意味着User
和Woman
由字段cellid和cell_id链接,因此您必须在belongs_to
和has_many
指令中指定这些字段:< / p>
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 %>
答案 1 :(得分: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.phone
属性的Users.name
对象数组。