5.5 Ajax
Ajaxでフォームを送信する
Ajaxでフォームを送信するには、form_for
およびform_tag
のremote
オプションをtrue
にする必要があります。
app/controllers/posts_controller.rb
class PostsController < ApplicationController
def new
@post = Post.new
end
def create
@post = Post.create(post_params)
end
private
def post_params
params.require(:post).permit(:title, :body)
end
end
app/views/posts/new.html.erb
<%= form_for @post, remote: true do |f| %>
<%= f.text_field :title %>
<%= f.text_area :body %>
<%= f.submit "保存" %>
<% end %>
app/views/posts/create.js.erb
console.log('<%= @post.to_json %>');
remote: true
を設定することにフォームはAjaxで送信され、ページのリロードは起こりません。
コントローラはアクションを処理したあと、フォーマットがjs
のERBテンプレートを呼び出します。この中ではインスタンス変数およびRubyのコードなどが実行できます。
今回の例ではJavascriptのconsole.log
メソッドを使って@post
変数の中身をJsonとして出力しています。
Ajaxのリンクを生成する
Ajaxのリンクを生成するにはlink_to
メソッドのremote
オプションをtrue
にする必要があります。
<%= link_to "削除", post_path(@post), method: :destroy, remote: true %>
app/controllers/posts_controller.rb
class PostsController < ApplicationController
def destroy
@post = Post.find(params[:id])
@post.destroy
end
end
上の例ではposts_controller
のdestroy
アクションが呼ばれます。コントローラがアクションを処理するとdestroy.js.erb
が呼ばれます。