我有3个型号。用户有多个投资组合,投资组合有多个资产。
当用户登录时,这会使current_user
成为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
提交表单后,它将转到我的Assets控制器Create
函数。 Create
不能简单地拥有@current_portfolio
,因为它位于不同的控制器上。我也无法使用find_by_id(params[:id])
,因为:id
没有提供任何内容。
当我有3个型号时,如何参考第二个型号? (对不起,我是铁杆的新手......)
编辑更新:我以为我找到了解决方案,但意识到它没有用。
我在表单中传递<%= hidden_field_tag :portfolio_id, params[:id]%>
并将我在资源控制器中的创建设置为
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%>
答案 0 :(得分:0)
我的猜测是隐藏字段中的portfolio_id不会作为资产哈希的一部分返回。也许它就像在保存之前分配@ asset.portfolio_id = params [:portfolio_id]一样简单。检查日志以确切了解POST中的内容