Вернуть записи из 2 таблиц, используя mysql и rails 3 - PullRequest
3 голосов
/ 22 марта 2011

нужна помощь с этим пожалуйста:@follows = Follow.where("admin_user_id = ?", session[:id])Это возвращает записи из таблицы Follow, которая имеет следующие столбцы: admin_user_id,: assignment_id.Теперь я хотел бы сделать это:

@assignments = Assignment.where("id = ?", @follows.assignment_id)

Таблица назначений имеет следующие столбцы: id,: name.I попытался "@ follow.assignment_id", чтобы заменить каждый идентификатор, который я затем могу использоватьв виде, как,

<% @assignment.each do |assignment| %>
     <%= assignment.name %>
<% end %>

Заранее спасибо за вашу помощь

Ответы [ 2 ]

3 голосов
/ 22 марта 2011

Часть проблемы здесь - ваш первый запрос: Follow.where(...) возвращает область, он не будет выполнять запрос, пока вы не попытаетесь получить доступ к объекту @follows.Вероятно, это не имеет большого значения, но вы, вероятно, должны сделать это следующим образом (если вы не собираетесь динамически добавлять дополнительные условия):

@follows = Follow.where("admin_user_id = ?", session[:id]).all

Это гарантирует, что @follows является массивом объектов Follow.Поскольку это массив (а не один Follow), в нем нет assignment_id.Измените ваш второй запрос следующим образом:

@assignments = Assignment.where(:id => @follows.map{|f| f.assignment_id}).all

По сути, .map возвращает массив возвращаемых значений блока вместо исходного объекта, для которого он был вызван, то есть вместо массива последующих онвозвращает массив идентификаторов присваивания каждого объекта.Когда вы передаете этот массив как условия, он генерирует SQL-запрос наподобие:

select * from assignments where id IN (1, 2, 3)

, если у ваших подписчиков есть идентификаторы присваивания 1, 2 и 3.

1 голос
/ 22 марта 2011

В вашей модели:

class Follow < ActiveRecord::Base
  belongs_to :assignment
end

Для назначений

class Assignments < ActiveRecord::Base
  has_many :follows
end

Тогда вы можете позвонить

@assignments = []
@follows.collect {|f| @assignments << f.assignment}

Также:

This is the error i get:undefined method `assignment_id' for #<ActiveRecord::Relation:0xb6d8104c>

Убедитесь, что в вашей таблице sql есть столбец с именем assignment_id с целочисленным значением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...