0

has_many アセット (つまり、アセット モデル) のポートフォリオ モデルがあります。

My Portfolio Show ビューには、現在のユーザーのポートフォリオの資産が表示されますが、資産を current_portfolio にすばやく追加するためのフォームもあります。

 <%= form_for(@asset) do |f| %>
      <%= hidden_field_tag :portfolio_id, params[:id]%>
      <%= f.text_field :asset_symbol %>
      ... some other fields for cost, shares held, etc
      <%= f.submit "Add Asset to current portfolio"%>
 <%end%>

アセットの追加は正常に機能します。また、シンボル フィールドを空白のままにすると、アセットが追加されなくなります。ただし、フォームを送信してもエラーは表示されません。

私はvalidates :asset_symbol, presence: true自分のモデルに持っていますが、それが保存されていないことを知っています。問題は、ポートフォリオ表示ビューにエラーが渡されないことです。アセット コントローラーとポートフォリオ表示ビューの間でアセット エラーが消えたかのようです。

表示ビューには次のエラーが表示されます

 <% if @asset.errors.any? %>
      <% @asset.errors.full_messages.each do |msg| %>
          <li> <%= msg %> </li>
      <% end %>
  <%end%>

@asset は私のポートフォリオコントローラーとして定義されていますAsset.new

アセット コントローラー:

def create
    @asset = Asset.new(params[:asset])
    @asset.portfolio_id = params[:portfolio_id]
    @asset.save
    redirect_to portfolio_path(params[:portfolio_id])
end

私は何を間違っていますか?

render 'portfolios/show'エラーが表示された場合は注意して/assetsください/portfolio/show/1。これは重要です。これは、アセット コントローラーに同じ変数がなく、また、で実行できることをinでCreate参照できないためです。したがって、レンダリングは解決策ではないと思います。:id/assets/portfolio/show/1

4

1 に答える 1

0
  def create  
    @asset = Asset.new(params[:asset])
    @portfolio = Portfolio.find(params[:portfolio_id])
    @asset.portfolio_id = params[:portfolio_id]
    respond_to do |format|    
      if @asset.save
        format.html { redirect_to portfolio_path(params[:portfolio_id]) }
      else
       format.html { render :action => "show", :controller => "portfolio?" }
      end
    end
  end
于 2013-03-07T07:15:42.387 に答える