我不太确定还没有答案,但是我不确定要搜索什么,因此如果我要问的是已经回答的问题,请指出正确的方向。

我有2个型号:

stock_symbol和weight_symbol

stock_symbol中具有与weight_symbol模型中的commodity匹配的symbol

如何获得关联才能工作,所以当我执行stock_symbol.weight_symbol时,我将获得weight_symbol。

我知道如何在SQL中执行此操作,但是如果它不是this_id的标准id ,那么我就迷路了。

编辑:

class StockSymbol < ActiveRecord::Base
  has_many :weight_symbols, primary_key: :symbol

  def commodity
    "LC" # This is just an example to simplify it, there is much more to this.
  end
end

class WeightSymbol < ActiveRecord::Base
  belongs_to :stock_symbol, foreign_key: :commodity
end

stock_symbol中的样本对象:

StockSymbol.last
<#StockSymbol id: 729, symbol: "LCJ13C12500", created_at: "2013-03-15 21:50:49", updated_at: "2013-03-15 21:50:49">

weight_symbol中的样本对象:

WeightSymbol.first
<#WeightSymbol id:1, weight_group_id: 1, symbol: "LC", created_at: "2010-01-05 21:13:28", updated_at: "2010-01-05 21:13:28">

设置并运行StockSymbol.last.weight_symbols.to_sql我得到:

"SELECT `weight_symbols`.* FROM `weight_symbols` WHERE `weight_symbols`.`stock_symbol_id` = 'LCJ13C12500'"

编辑2:

查询它应该做的(我认为):

SELECT * FROM `weight_symbols` WHERE `weight_symbols`.`symbol` = 'LC';

查询以获取所需的信息。

SELECT * FROM `weight_symbols` a
JOIN `stock_symbols` b
ON a.symbol = b.commodity
WHERE b.symbol = 'LCJ13C12500';

新股票代码对象

<#StockSymbol id: 729, symbol: "LCJ13C12500", created_at: "2013-03-15 21:50:49", updated_at: "2013-03-15 21:50:49", commodity: "LC">

#1楼 票数:3 已采纳

rails关联方法带有用于覆盖关系中使用的默认键的选项。 如果它是StockSymbolWeightSymbol之间的一对多关联,则使用以下代码:

# stock_symbol.rb
has_many :weight_symbols, primary_key: :symbol

# weight_symbol.rb
belongs_to :stock_symbol, foreign_key: :commodity

(不确定我是否正确找到了关联,但是您应该知道这个主意。)

协会基础guid中的“ 详细协会参考详细列出了属于每种协会类型的所有选项和方法。


编辑 :根据您更新的问题一些额外的东西。

对于您的关联应该如何工作,我有些困惑WeightSymbol似乎没有commodity属性。 如果一个WeightSymbol匹配到它所属的StockSymbolweight_symbol.symbol == stock_symbol.commodity 在这种情况下,您需要相应地设置密钥:

# stock_symbol.rb
has_many :weight_symbols, primary_key: :commodity
# :primary_key is the field on this model whose value associated models will store in their foreign_key

# weight_symbol.rb
belongs_to :stock_symbol, foreign_key: :symbol
# :foreign_key is the column on this model that should match the primary_key field in the associated model

其次,您只能使用数据库列设置Rails关联,而不能使用方法。 如果您绝对必须使用一种方法,则可能会伪造该关联,例如使用类似以下内容的伪造:

# stock_symbol.rb
def weight_symbol
  WeightSymbol.find_by_symbol(self.commodity)
end

不利的一面是它的效率极低,并且会大量重新设计所涉及的轮子。

如果您可以选择将commodity设为数据库字段,那将是最好的解决方案,具体取决于它可能会更改的频率。 例如,如果它是从模型的当前状态派生的,则可以在模型上设置一个before_save过滤器,以执行需要进行的任何处理并将适当的值写入该字段:

# stock_symbol.rb
before_save :set_commodity

def set_commodity
  commodity = "LC" # arrived at through whatever processing you do
  self.commodity = commodity
end

  ask by Toby Joiner translate from so

未解决问题?本站智能推荐:

2回复

Rails:活动记录协会

我为解决AR协会的问题而动摇了两天。 我知道有一个简单的解决方案,但我不知道。 我有两个模型“产品”和“用户”,应该链接在一起。 产品应属于用户,并且用户应拥有许多产品。 我没有设法在控制器中设置用户变量,所以我去了一个habtm关联。 这些是模型: User.rb
1回复

ActiveRecord包含缺少记录的关联

我在做以下查询 返回15条记录,但关联的模型portfolio_distribution_split为nil 。 如果我更改查询以包括assocird模型,如下所示: 我只得到3条记录? 如果我使用生成的SQL并直接对数据库运行它,则会得到15条记录。 其他12条记录怎么了
6回复

如何计算具有一个或多个关联对象的记录数?

我有一个Property模型has_many :photos 。 我想计算一张或多张照片的properties数量。 我怎么做? 我试过这么简单: 至: 更先进的: 以及其他一些变化,它们都会产生类似的错误。 我究竟做错了什么? 注意:我想要的只
3回复

如何使用Rails中的关联保存到数据库以保护批量分配

尝试了几个小时后,我无法保存到数据库。 上下文是这样的:我有两种类型的用户,一种只需要非常基本的信息(用户名,电子邮件,密码),另一种需要很多信息的用户(年龄,性别,城市等) ] 由于表中将存在大量的Null值,因此我没有使用STI。 因此,我创建了这三种模式,在这种模式下,用户是
1回复

通过许多现有关联自动创建关联

我正在开发一个引擎,其中任何模型都可以具有与Permit允许的has_many关联: 因此,组has_many:permits和Person has_many:permits。 我想做的是在User上动态创建关联,该关联使用allows关联作为源,并通过执行相同操作在其他模型上链接到U
3回复

Rails销毁所有嵌套的关联

我有以下情况 我想删除所有与公司相关的模型,而不要一一对应。 我的从属销毁工作不正常,当我尝试删除公司时,产品仍然存在。 我尝试更换 但没有运气。 如何通过一次destroy to company调用删除所有嵌套对象? 编辑 我可以打电话 并一一删除所有
3回复

Rails:Elasticsearch:通过关联映射

当我有一个has_many, :through我正试图索引模型has_many, :through关联,但没有显示任何结果。 那么这就是服务模型 我还使用这个重新索引: 我可以在Business中搜索项目,但是当我尝试在Service中搜索某些内容时,我得到一个空的结果。
1回复

如何通过方法中的关联值获取?

在我的一个模特中,我有这个 我正在尝试看看如何从服务中获取价值 我的服务模型中有列service和description 。 我正在使用Elasticsearch,并且想为服务模型建立索引。 我不确定映射是否正确,我应该使用以下方法获取json: 这就是我得到的