0

我有 3 个模型。用户有多个投资组合,投资组合有多个资产。

当用户登录时,这使他成为current_userby 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%>
4

1 回答 1

0

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

于 2013-03-06T05:46:00.723 回答