2016-05-27 5 views
3

私はRails 4.2.3を使用しています。私はモーダルダイアログでフォームを送信したいので、私はそうRailsでリモートフォームを送信した後、そのユーザーを別のページにリダイレクトするにはどうすればよいですか?

<%= form_for @my_object, :remote => true do |f| %> 

ように私のフォームを設定しているが、ユーザーが正常にフォームを送信した場合、私はモーダルダイアログを呼び出したページをリロードしたいと思います「Saved Successfully」の通知。これを実現させるために私が "format.js"に入れなければならないものはわかりません。これは、私がこれまでに...

def create 
    @my_object = MyObject.new(my_object_params) 
    @current_user = User.find(session["user_id"]) 
    @my_object.user = @current_user 
    respond_to do |format| 
     if @my_object.save 
     format.html { redirect_to controller: "users", action: "index", notice: 'Saved successfully.' } 
     format.js { render action: ‘../users/index’, notice: ‘Saved Successfully’, location: @my_object } 
     else 
     format.html { render action: "index" } 
     format.js { render json: @my_object.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

私のコントローラを持っている私は何をしようとすると、上記を実行するときにパーシャルを逃し不満500エラーで成功提出結果です。とにかく私が持っているものが間違っていることを確かめる。

+2

なぜ 'remote:true'なしで単純なhtml版を使いたくないのですか?あなたはそれをリダイレクトしたい場合。 – 7urkm3n

+0

@ 7urkm3nと同意します。リダイレクト/リロードを追加すると、リモートフォームを使用する目的が無効になります。 – mmichael

+0

他のポスターへの私のコメントによれば、検証エラーがある場合、それらをモーダルウィンドウに表示します。さもなければ、私はページをリロードしてウィンドウを再生成しなければならず、それは乱雑に見えます。 – Dave

答えて

6

あなたは次の操作を行うことができます:あなたが分離物事を保つように、ちょうどあなたのコントローラでformat.jsを置く場合

#app/controllers/redirect.rb 
... 

format.js { render js: "window.location='#{url.to_s}'" } 

... 

とJavaScriptは、あなたのビューにリダイレクト行う(redirect.js.erb)を

どちらの場合でも、リダイレクトする前にflash [:notice]を設定してください。

+0

素晴らしい提案! –

0

とにかくリダイレ​​クトしている場合は、リモート/ AJAXコールを避けるだけでなく、作成アクションからリダイレクトすることもできます。

<%= form_for @my_object do |f| %> 

def create 
    @my_object = MyObject.new(my_object_params) 
    ... 
    redirect_to some_path 
end 
+1

この場合、検証エラーをどのように表示するのですか?私がAJAXなしでそれを提出している場合は、ページをリロードしてからモーダルウィンドウを再作成しなければなりません。 – Dave

0

あなたは成功しcreate/updated後にそれをリダイレクトし、ちょうど.htmlメソッドを使用したい場合。それ以外の場合は、このLINKのようなJSオプションを使用してください。

def create 
    @my_object = MyObject.new(my_object_params.merge(user: User.find(session["user_id"]))) 
    respond_to do |format| 
     if @my_object.save 
     format.html { redirect_to controller: "users", action: "index", notice: 'Saved successfully.' } 
     else 
     .... 
     end 
    end 
    end 
+0

成功ブランチで自分の「format.js」ブロックを削除すると言っていますか?私はtahtを試みたが、うまくいかなかった。私は私のログでこれを見ましたが、 "UsersController#index by JS"という処理をしていましたが、クライアントサイドでは何も起こりませんでした。 – Dave

+0

@Dave dntはフォームから 'remote:true'を削除するのを忘れないでください! – 7urkm3n

+1

そうですね、どうすれば検証エラーを動的に表示できますか?これはモーダルウィンドウなので、通常のフォームを送信するには、ページを再読み込みしてそのウィンドウを再作成する必要があります。 – Dave

1

redirect_toのevents_path、フォーマット:あなたはあなたのファイル構造内のイベント/ index.js.erbを持っている必要があります。このために 'JSの'

関連する問題