查询Ruby on Rails?

时间:2013-06-29 15:23:43

标签: sql ruby-on-rails ruby-on-rails-3.2

我如何在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

2 个答案:

答案 0 :(得分:0)

您的select语句意味着UserWoman由字段cellid和cell_id链接,因此您必须在belongs_tohas_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'])

在这两种情况下,您将获得包含UsersWomen.phone属性的Users.name对象数组。