我有 3 个模型。用户有多个投资组合,投资组合有多个资产。
当用户登录时,这使他成为current_user
by find_by_id
。当他们第一次注册时,它会为他们创建一个投资组合。这成为 current_portfolio。
在此之后,他们可以创建投资组合,将它们重定向到所有投资组合的列表。单击每个链接将使该投资组合成为 current_portfolio。
@current_portfolio = current_user.portfolios.find_by_id(params[:id])
投资组合的显示视图具有资产表单,以便他们可以快速将资产添加到投资组合。这就是我卡住的地方。因为资产表单在投资组合show
视图中,所以我的资产控制器需要引用 current_portfolio,但这是在我的投资组合控制器中。
投资组合控制器:
def show
@current_portfolio = current_user.portfolios.find_by_id(params[:id])
@asset = @current_portfolio.assets.build
end
提交表单后,它会转到我的资产控制器Create
功能。Create
不能简单地拥有@current_portfolio
,因为它位于不同的控制器上。我也不能使用find_by_id(params[:id])
,因为:id
没有提供任何东西。
当我有 3 个模型时,如何引用第二个模型?(对不起,我是 Rails 的新手......)
编辑更新:我以为我找到了解决方案,但意识到它不起作用。
我传入<%= hidden_field_tag :portfolio_id, params[:id]%>
了我的表单并将我在 Asset 控制器中的 Create 设置为
def create
@asset = Asset.new(params[:asset])
@asset.save
end
但它没有得到我模型中必填字段的portfolio_id。
在我看来完整的形式
<%= form_for(@asset) do |f| %>
<%= hidden_field_tag :portfolio_id, params[:id]%>
<%= f.text_field :asset_symbol %>
<%= f.text_field :shares %>
<%= f.text_field :cost %>
<%= f.text_field :purchase_date, :type=>'date' %>
<%= f.submit "+ Add to Portfolio" %>
<%end%>