3

私は初めての Rails アプリケーションを構築しており、Ruby と Rails の両方が初めてです。フォームが ajax 経由で送信された後、ページに送信メッセージをレンダリングしようとしています。

フォームに :remote => true パラメータを追加しました。ただし、アプリケーションでメッセージをレンダリングできないようです。テストとして、新しいレールアプリをセットアップし、足場を使用してフォームで投稿モデルとビューなどを生成しました。

生成されたフォームに remote :remote => true を追加しました。データをデータベースに送信します。コントローラーを更新して、format.jsでjsを含めることができることを読みました。この場合、posts_controller.rb funcを更新します

def new
  @post = Post.new

  respond_to do |format|
    format.html # new.html.erb
    format.js
  end
end

いくつかのチュートリアルでは、views/posts フォルダーに new.js.erb または create.js.erb (どちらであるかは不明) を追加するだけで実行できると述べていますが、これを実行する必要がありますが、送信されるデータ以外は何も起こりません。 .

私も試しました:

format.js { render :js => "alert('Hello Rails');" }   

テストとして。

Rails 3.1 を使用していますが、次に何を試すべきか途方に暮れています

4

1 に答える 1

7

あなたはほとんどそこにいます。送信されたフォームは、new ではなく create アクションによって処理されます。これで、html または js を処理するための正しい構文が得られました。作成アクションで必要なのは、レンダリングする js を含む create.js.erb だけです。

PostsController には、次のような create 関数が必要です。

def create
  @post = Post.new(params[:post])

  respond_to do |format|
    if @post.save
      format.html 
      format.js 
    else
      format.html { render :action => 'new' }
      format.js   { render 'fail_create.js.erb' }
    end
  end
end

create.js.erb という名前のファイルを (投稿用のビュー ディレクトリに) 作成します。

alert('Hello Rails');

成功した場合は、準備ができているはずです。失敗した場合 (たとえば、送信されたフォーム データがモデルの検証に合格しない場合) にレンダリングする JavaScript を含む、fail_create.js.erb という名前の 2 番目のファイルを作成します。

于 2012-04-30T22:00:20.503 に答える