2017-04-22 5 views
0

私はリモートについて混乱しています:Railsフォームで真ですが、私は非同期にするためにいくつかのJavascriptが必要だと思っていましたが、これは私のページを壊すようです。ここでRailsとAJAX remote:それ以外は何が必要ですか?

は、すべての予定を表示部分を含んで本当に簡単index.html.hamlである:ここでは

%h1 Calander 

%h2 AppointmentsController 
%h3 Make a new appointment 

= form_for @appointment, remote: true do |f| 
    = f.text_field :title 
    = f.text_field :appt_time 
    = f.submit 'Make appointment' 

#appointments 
    =render 'appointments' 

は、以前に部分的に言及されている:インデックスの

[email protected] do |a| 
    %h3= a.title 
    %p= a.appt_time 

コントローラのメソッドを作成し、 :

def index 
    @appointments = Appointment.order('appt_time ASC') 
    @appointment = Appointment.new 
    end 

    def create 
    @appointmet = Appointment.create(appointment_params) 
    redirect_to :root 
    end 

これで正常です。私は新しい予定を追加することができます、提出をヒットし、ページを更新せずに新しい予定が表示される、私はremote: trueが含まれていると思います。だから私は要求を処理するために何かを追加する必要がありますか?この要求を処理し、完全にリモートに依存するものを含まないことでベストプラクティスに違反していますか?

答えて

1

何もありません。あなたはどんな慣習をも破らなかった。このdocumentを読んで、混乱を乗り越えることができます。

1

もう一度元気にしましょう。

Webアプリケーションは、さまざまな要求形式に応答できます。 Railsにはフォーマット処理が組み込まれています。

したがって、要求はindexをHTML経由で要求することがあります。この応答はHTMLファイルで応答します。 JSON、XML、PDF、さらにはJavaScriptを使用してindexをリクエストすることもできます。

remote: trueを追加するたびに、HTMLの代わりにJS経由でPOSTリクエストをフォームに伝えています。

あなたのビューには、HTML.ERBファイルがたくさんあります。これらのビューは要求応答です。

インデックスを作成するJSリクエストを処理するには、app/views/appointements/index.jsファイルが必要です。

これはリクエストに対する応答として送信され、ブラウザはJS応答で何をすべきかを知るでしょう。

index.jsには、応答を受信すると実行されるJSを記述することができます。

ページに部分データを読み込むこともできます。例えば

:応答のためのJavaScriptの文字列として一部のコンテンツをレンダリングする

# app/views/appointements/index.js 
$('#appointements').html('<%= j render "appointements" %>') 

。あなたには、いくつかのコールバックアヤックスコールをしない限り複数の必要

http://guides.rubyonrails.org/working_with_javascript_in_rails.html

+0

ありがとうございました! '<%= jレンダリング "アポイントメントの" j "とは何ですか?%>' – tfantina

+0

ERBはファイルの埋め込みであるため、すべてのRubyコードはファイルの内容に変換されます。ファイルの内容をJS文字列 ''

'にします。これはERBにファイルの内容として書くのではなく、JSのコードとして書くことを教えてくれるでしょう:)もしHTMLの部分的な内容が ''/n ''改行を持っていたら、これはファイルの改行になります'/ n" 'を含むJS文字列です。 – fbelanger

関連する問題