0

我如何在 Rails 中进行此选择?

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

模型/用户.rb

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

模特/女人.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
4

2 回答 2

0

您的 select 语句暗示UserandWoman由字段 cellid 和 cell_id 链接,因此您必须在belongs_toandhas_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 %>
于 2013-06-29T15:49:54.543 回答
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属性的对象数组。

于 2013-06-29T15:55:02.220 回答