ruby-on-rails - 通过显示 has_many
问题描述
我有一个关于显示 a has many through 关联的快速问题。
我在 3 种不同的模型中设置了以下关联
assignment.rb
class Assignment < ApplicationRecord
belongs_to :stock
belongs_to :portfolio
end
portfolio.rb
class Portfolio < ApplicationRecord
has_many :assignments
has_many :stocks, through: :assignments
accepts_nested_attributes_for :stocks
end
stock.rb
class Stock < ApplicationRecord
has_many :assignments
has_many :portfolios, through: :assignments
end
我想做的是在您将股票分配给投资组合后,在投资组合指数页面上显示投资组合中的所有股票
我目前在我的投资组合指数视图中有这个
<% @portfolios.stocks.each do |a|%>
<p><%= a.ticker %></p>
<%end%>
但我收到以下错误
undefined method `stocks' for #<Portfolio::ActiveRecord_Relation:0x51f0fd8>
我不明白我做错了什么
解决方案
在这里,您已经定义了和之间的many to many
关系。portfolios
stocks
这意味着对于每个投资组合,您都有多个股票记录。
因此,要获得与投资组合相关的所有股票,您必须使用some_porfolio.stocks
您的代码无法正常工作,因为您正在使用数组,active_record
并且您要求它一次性获取所有投资组合的股票,但关系不是数组active_records
和数组之间的关系active_records
。相反,它是在另一个活动记录的单个active_record
持有之间。foreign_key
如果您想根据投资组合的记录显示股票列表,那么最好使用
<% @portfolios.each do |porfolio| %>
<!--- your html code for each portfolio -->
ID: <%= portfolio.id %>
<!--- your html code for each stock associated to this portfolio -->
<% portfolio.stocks.each do |stock| %>
<!--- your html code for each stock -->
ID: <%= stock.id %>
<% end %>
<% end %>
推荐阅读
- microsoft-graph-api - 通过图形 API 从用户那里获取所有下属
- react-native - 如何在不重新加载导航的情况下使用 react-navigation 更新 React-Native 中的标签栏徽章?
- api - 公开异步系统的公共 API
- facebook - Facebook 业务集成不起作用
- excel - 如何解决 ClosedXML 中的“未找到匹配项”异常
- python - Python OCR IMG 和删除控制字符
- javascript - 如何制作一个包含图像的响应式矩形网格
- vue.js - 在 VueJS 中存储用户令牌的最佳位置在哪里?
- python-3.x - Python:指定类型的文档属性
- c# - 使用 SkiaSharp 在图像中添加文本