1

这是我第一次遇到这个问题。

我有一个向更新两个表的控制器提交发布请求的视图。

def update
  if request.post?
    if @circuit
      # update
      @circuit.update_attributes params[:circuit]

      @logical_interface = LogicalInterface.new params[:logical_interface]
      @logical_interface.save


      #redirect_to :action => 'update', :id => @circuit.id
      @success = "Updated." if @circuit.valid?
    else
      # attempt create
    end
  end
end

这三行是我添加到控制器中的内容:

@logical_interface = LogicalInterface.new params[:logical_interface]
@logical_interface.save


redirect_to :action => 'update', :id => @circuit.id # this was added because the view wasn't being updated until refreshed

如果我保留重定向,视图将相应更新,但变量中没有Updated.消息。@success

如果我注释掉重定向,circuit我的表单顶部的表单字段将更新,但不会更新logical_interfaces我添加到的表,但我仍然会收到Updated.成功消息。一切都直接在视图中,不使用任何部分。

希望我已经正确解释了它,但是如果有人不确定,那么我可以更新问题以更详细地说明。

表格只是:

<%= form_tag :controller => "circuit", :action => "update" %>
    ...
</form>

在表单中,我使用两个对象circuitlogical_interface拆分输入,以便在控制器中我可以更新circuit并创建一个新的logical_interface.

4

1 回答 1

2

尝试调整redirect_to和@success的位置,我认为redirect_to应该是块的最后一行。

如果你使用redirect_to,你会丢失所有的实例变量,所以更好的方法是使用flash。

在您的控制器中:

flash[:notice] = "Updated." if @circuit.valid?    
redirect_to :action => 'update', :id => @circuit.id

在您的页面中:

<p><%= flash[:notice]%></p>
于 2013-08-15T09:18:00.110 回答