DataMapper => фильтр «один ко многим» - PullRequest
0 голосов
/ 17 января 2011
class Task
  include DataMapper::Resource
  has 1, :list, :through => Resource
end

class List
  include DataMapper::Resource
  has n, :tasks, :through => Resource
end

В списке много задач.Предположим, у меня есть задача с id = 1.

Как мне найти список с этой задачей?

Я попытался: List.first (: tasks => task), но этовсегда возвращает ноль.

Спасибо.

Ответы [ 3 ]

1 голос
/ 17 января 2011

а как же Task.first(:id => 1).list?Кстати, вы действительно должны изменить определения своих моделей.Я рекомендую вам прочитать документацию к Datamapper полностью .

class Task
  include DataMapper::Resource

  belongs_to :list
end

class List
  include DataMapper::Resource

  has n, :tasks
end

Разве это не выглядит лучше?Ох, и я надеюсь, что вы определили ключи.Это важно для хорошо работающих ассоциаций.И если id является ключом для Task, ваш запрос упростится до Task.get(1).list.

0 голосов
/ 17 января 2011

Почему у вас есть 1 через ресурс?Я бы сделал Task.belongs_to: list, а затем List.has n,: tasks, чтобы вы могли написать:

List.first :"tasks.id" => task.id

Хотя, если у вас уже есть задача, проще написать task.list:)

0 голосов
/ 17 января 2011

Вы можете использовать вложенное условие следующим образом:

List.first(:tasks => { :id => task.id })

но с учетом задачи было бы проще использовать task.list

...