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つのモデルがある場合、2番目のモデルを参照するにはどうすればよいですか?(申し訳ありませんが、私はRailsの初心者です...)

更新の編集:私は解決策を見つけたと思いましたが、それが機能しないことに気づきました。

フォームを渡し<%= 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%>
4

1 に答える 1