私は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つのモデルがある場合、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%>