0

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

モデル/女性.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 ステートメントは、フィールド cellid および cell_id によってリンクされていることを意味するため、 and ディレクティブでそれらを指定する必要がUserあります。Womanbelongs_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 %>
于 2013-06-29T15:49:54.543 に答える
0

これを行うにはいくつかの方法があります (私は 2 番目のオプションを使用します)。

# 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 に答える