【问题标题】:Rails View doesn't update until refreshed but controller is updating database fineRails View 在刷新之前不会更新,但控制器正在更新数据库正常
【发布时间】:2013-08-15 08:50:03
【问题描述】:

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

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

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

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

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

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

表格只是:

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

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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-2


    【解决方案1】:

    尝试调整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>
    

    【讨论】:

    • 谢谢,我确实尝试过,但这样页面会更新正常,但我没有收到成功消息。
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2020-02-15
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多