Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Rails-指定哪个连接列_Mysql_Ruby On Rails_Join_Activerecord - Fatal编程技术网

Mysql Rails-指定哪个连接列

Mysql Rails-指定哪个连接列,mysql,ruby-on-rails,join,activerecord,Mysql,Ruby On Rails,Join,Activerecord,我有两种型号Quote和QuoteVersionQuote有许多QuoteVersion,而QuoteVersion属于Quote,而Quote属于QuoteVersion,因为我希望能够通过调用Quote>来获取当前版本,和algo通过调用quote.quote\u versions获取所有版本。这个设计好吗?我发现使用quote.quote\u versions.last查找当前版本很麻烦。想法 我需要创建一个查询以仅获取当前版本,我知道我可以使用以下方法执行此操作: Quote.joins

我有两种型号
Quote
QuoteVersion
Quote
有许多
QuoteVersion
,而
QuoteVersion
属于
Quote
,而
Quote
属于
QuoteVersion
,因为我希望能够通过调用
Quote>来获取
当前版本,和algo通过调用
quote.quote\u versions
获取所有版本。这个设计好吗?我发现使用
quote.quote\u versions.last
查找当前版本很麻烦。想法

我需要创建一个查询以仅获取当前版本,我知道我可以使用以下方法执行此操作:

Quote.joins(:Quote\u versions)。其中(“Quote\u versions.id=quotes.Quote\u version\u id”)

,但有没有更干净的方法?我需要包括几个其他条件,比如:
Quote.joins(:Quote\u versions)。其中(“Quote\u versions.id=quotes.Quote\u version\u id”)。其中(Quote\u versions:{approver\u id:nil,approved:nil})

我认为能够做以下事情会更干净:

Quote.joins(:Quote\u versions).where(Quote\u versions:{id::Quote\u version\u id,approver\u id:nil,approved:nil})
,其中包括散列格式中的所有条件,我只是不知道如何在报价模型上指定join列,或者如果可能的话


提前感谢。

据我所知,这些“其他几个条件”旨在获得当前报价版本,因此我认为您可以采用以下方法:

def quote_version
 Quote.joins(:quote_versions).where(quote_versions: {...} ).where(quote_id: self.id)
end
现在,如果您想稍微清理一下,可以在QuoteVersion模型中使用作用域:

class QuoteVersion < ActiveRecord::Base
  scope :not_approved, ->{where(approved_id: nil,approved:nil)}
end

你想要实现的目标看起来不太清楚,所以我希望我的回答能对你有所帮助。其他条件是确定报价是否正在审核、批准等。因此,我首先想确保我可以使用干净的方式获取
Quote.joins(:Quote\u versions)。where(“Quote\u versions.id=quotes.Quote\u version\id”)
零件右侧。其余的条件都很简单。正如我在回答中提到的,我看到的最“干净”的解决方案是使用范围。至于您最初的查询,我建议您选择
def quote_version
  self.quote_versions.not_approved.where(quote_versions: {id: quote_version_id})
end