如何在3模型系统中选择当前模型?

时间:2013-03-06 04:06:45

标签: ruby-on-rails

我有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%>

1 个答案:

答案 0 :(得分:0)

我的猜测是隐藏字段中的portfolio_id不会作为资产哈希的一部分返回。也许它就像在保存之前分配@ asset.portfolio_id = params [:portfolio_id]一样简单。检查日志以确切了解POST中的内容