У меня есть модель Клиента, в которой много: туров, ассоциаций.Я использую этот код для предоставления всем клиентам своих туров,
render :json => Client.all(:include => :tours)
Теперь требование изменилось так, что это представление объекта загружает только туры пользователя.Каждый тур связан с пользователем, с которым у пользователя много: туров.Я попытался
render :json => Client.all(:include => :tours, :conditions => ["tours.user_id = ?", params[:user_id]])
. Это дает мне клиентов, которые совершают поездки по этому пользователю, но перечисляет все поездки этих клиентов.Но я хочу, чтобы только туры этого пользователя были указаны только под каждым клиентом.Могу ли я сделать это, используя :includes
?
client.rb
has_many :tours, :dependent => :destroy
user.rb
has_may :tours, :dependent => :destroy
Обновление
Я подумал, что было бы лучше добавить пример, чтобы объяснить мою проблему.Предположим, есть 3 клиента A, B, C.
- Клиент A имеет 3 тура (все пользователь user1)
- Клиент B имеет 4 тура (ни один пользователь user1)
- Клиент C имеет 3 тура (1 пользователь user1, другие пользователи)
Теперь, если мы используем мой метод, чтобы получить ответ для user1, это будет выглядеть так:
[
{
"name": "Client A",
....
"tours": [
{
"name": "Tour1",
....
},
{
"name": "Tour2",
......
},
{
"name": "Tour3",
.....
}
]
},
{
"name": "Client C",
....
"tours": [
{
"name": "Tour4",
...
},
{
"name": "Tour5",
...
},
{
"name": "Tour6",
...
}
]
}
]
Вы можете видеть, что Клиент B был опущен, а Клиент A и Клиент C были включены, что является правильным.Но для Клиента C только Tour5 принадлежит пользователю user1.Но в него включены все туры.Я хочу, чтобы в моем ответе пропустили Tour5 и Tour6, например:
[
{
"name": "Client A",
....
"tours": [
{
"name": "Tour1",
....
},
{
"name": "Tour2",
......
},
{
"name": "Tour3",
.....
}
]
},
{
"name": "Client C",
....
"tours": [
{
"name": "Tour4",
...
}
]
}
]