:包括基于包含表的条件

时间:2011-11-10 15:51:22

标签: ruby-on-rails activerecord

我有一个模型客户端有很多:旅游,协会。我正在使用此代码为所有客户提供他们的旅行,

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 个答案:

答案 0 :(得分:1)

我只是猜测,但你尝试过以下方面的事情:

render :json => Client.all(:include => {:tours => :user}, :conditions => ["users.id = ?", params[:user_id]])