单独控制器的表单,错误不显示

时间:2013-03-07 02:45:11

标签: ruby-on-rails

我有一个投资组合模型,其中包含很多资产(即资产模型)。

我的投资组合显示视图显示当前用户的投资组合资产,但它还有一个表单,可以快速将资产添加到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,我知道它没有保存。问题是错误没有传递到我的Portfolio Show视图。就像资产错误在资产控制器和投资组合显示视图之间消失一样。

show视图具有以下应显示错误

 <% 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。这很重要,因为我的Create资产控制器中没有相同的变量,也因为我无法在:id中引用/assets,我可以在{{/portfolio/show/1中执行此操作1}}。因此,我不认为渲染是一种解决方案。

1 个答案:

答案 0 :(得分: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