首页 > 解决方案 > 通过显示 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>

我不明白我做错了什么

标签: ruby-on-railsruby

解决方案


在这里,您已经定义了和之间的many to many关系。portfoliosstocks

这意味着对于每个投资组合,您都有多个股票记录。

因此,要获得与投资组合相关的所有股票,您必须使用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 %>

推荐阅读