Ruby on rails :根据包含表上的条件包含

Ruby on rails :根据包含表上的条件包含,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个模型客户,其中有很多:旅游,在它的协会。我使用此代码为所有客户提供他们的旅行 render :json => Client.all(:include => :tours) 现在,需求发生了变化,使得此对象表示只加载用户的旅行。每个巡更与一个用户关联,该用户具有多个:巡更。我试过了 render :json => Client.all(:include => :tours, :conditions => ["tours.user_id = ?", param

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

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次巡演(所有用户1)
  • 客户端B有4个巡更(用户user1中没有一个)
  • 客户端C有3个巡更(1个用户用户1,其他用户的其他用户)
现在,如果我们使用我的方法获取user1的响应,它将如下所示:

[
  {
    "name": "Client A",
    ....
    "tours": [
      {
        "name": "Tour1",
        ....
      },
      {
        "name": "Tour2",
        ......
      },
      {
        "name": "Tour3",
        .....
      }
    ]
  },
  {
    "name": "Client C",
    ....
    "tours": [
      {
        "name": "Tour4",
        ...
      },
      {
        "name": "Tour5",
        ...
      },
      {
        "name": "Tour6",
        ...
      }
    ]
  }
] 
[
  {
    "name": "Client A",
    ....
    "tours": [
      {
        "name": "Tour1",
        ....
      },
      {
        "name": "Tour2",
        ......
      },
      {
        "name": "Tour3",
        .....
      }
    ]
  },
  {
    "name": "Client C",
    ....
    "tours": [
      {
        "name": "Tour4",
        ...
      }
    ]
  }
]    
您可以看到客户机B被省略,客户机A和客户机C被包括在内,这是正确的。但是,对于客户端C,只有Tour5属于用户user1。但是,它的所有旅行都包括在内。我希望我的回答省略Tour5和Tour6,如下所示:

[
  {
    "name": "Client A",
    ....
    "tours": [
      {
        "name": "Tour1",
        ....
      },
      {
        "name": "Tour2",
        ......
      },
      {
        "name": "Tour3",
        .....
      }
    ]
  },
  {
    "name": "Client C",
    ....
    "tours": [
      {
        "name": "Tour4",
        ...
      },
      {
        "name": "Tour5",
        ...
      },
      {
        "name": "Tour6",
        ...
      }
    ]
  }
] 
[
  {
    "name": "Client A",
    ....
    "tours": [
      {
        "name": "Tour1",
        ....
      },
      {
        "name": "Tour2",
        ......
      },
      {
        "name": "Tour3",
        .....
      }
    ]
  },
  {
    "name": "Client C",
    ....
    "tours": [
      {
        "name": "Tour4",
        ...
      }
    ]
  }
]    

我只是猜测,但您是否尝试过以下内容:

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

我认为,我们需要更多关于您的用户模型及其与客户模型的关系的信息:)@Pavel用户模型和客户模型之间没有关系……它们是独立的实体,并且在旅游模型之间都有很多关系。
用户id
字段位于
旅游
表中,而不是
用户
表中。我的问题不是条件。我用一个例子更新了我的问题。更新了我的例子以适应。它应该只包括给定的用户。。。这意味着任何附加到任何其他用户的内容都将从返回的集合中删除。好的…得到了…非常感谢…我在您第一次发布答案时没有注意到答案中的
{:tours=>:users}
部分。只需将
{:tours=>:users}
编辑到
:tours=>:user
,因为一个教程属于一个用户。