: включить в зависимости от условия на включенной таблице - PullRequest
0 голосов
/ 10 ноября 2011

У меня есть модель Клиента, в которой много: туров, ассоциаций.Я использую этот код для предоставления всем клиентам своих туров,

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",
        ...
      }
    ]
  }
]    

1 Ответ

1 голос
/ 11 ноября 2011

Я только догадываюсь, но вы пробовали что-то вроде:

render :json => Client.all(:include => {:tours => :user}, :conditions => ["users.id = ?", params[:user_id]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...