【问题标题】:form for separate controllers, errors not displaying单独控制器的表单,不显示错误
【发布时间】:2013-03-07 02:45:10
【问题描述】:

我有一个拥有许多资产的投资组合模型(即资产模型)。

我的投资组合显示视图显示当前用户的投资组合的资产,但它也有一个表单可以快速将资产添加到 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 上的问题。这很重要,因为我的资产控制器中没有与Create 相同的变量,还因为我无法在/assets 中引用:id,而我可以在/portfolio/show/1 中执行此操作。因此我不认为 render 是一个解决方案。

【问题讨论】:

  • 如果将重定向替换为:redirect_to portfolio_path(params[:portfolio_id], :asset => @asset) 会发生什么?您的错误未显示的原因是错误附加到 @asset 对象,该对象未传递到显示页面。
  • @AngeloChrysoulakis 我试过了,但什么也没发生,它只是将我重定向到portfolio_path(params[:portfolio_id]),而没有显示任何错误。我认为您走在正确的道路上,为什么您选择 :asset 作为传递给显示页面的符号?
  • 这就是我认为可能会发生的事情。请查看以下链接以获得完整的解决方案——stackoverflow.com/questions/1536428/…——我更喜欢使用 javascript 来处理这些细微差别。因此,在这种情况下,为了成功保存,我只需更新资产。否则,我会在前面加上一个错误部分。

标签: ruby-on-rails


【解决方案1】:
  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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多