1

この問題に遭遇したのはこれが初めてです。

2 つのテーブルを更新するコントローラーにポスト リクエストを送信するビューがあります。

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

これらの 3 行は、コントローラーに追加したものです。

@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>

フォームでは、2 つのオブジェクトを使用circuitlogical_interfaceて入力を分割し、コントローラで を更新しcircuitて新しい を作成できるようにしますlogical_interface

4

1 に答える 1

2

redirect_to と @success の位置を調整してみてください。redirect_to はブロックの最後の行にすべきだと思います。

また、redirect_to を使用すると、すべてのインスタンス変数が失われるため、より良い方法はフラッシュを使用することです。

あなたのコントローラーで:

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

あなたのページで:

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