2017-07-21 7 views
1

私はajaxを実装して、ページを再チャージせずにショーに行くのではなく(私はチュートリアルに従います)、ポストを作成したいと思いますが、動作しません。リモート見ることができます_form.html.hamlでRails 5.1.2 Ajax remote:true not working

:ポストが作成されたときに真のフォームヘルパーで

= form_for @post,remote: true do |f| 
    - if @post.errors.any? 
    #error_explanation 
    %h2= "#{pluralize(@post.errors.count, "error")} prohibited this post 
    from being saved:" 
    %ul 
     - @post.errors.full_messages.each do |message| 
     %li= message 

    .mdl-textfield.mdl-js-textfield.full-width 
    = f.text_area :body, class:"mdl-textfield__input" 
    = f.label :body, "Comparte con la Comunidad", class:"mdl- 
    textfield__label" 
    .actions.text-right 
    = f.submit 'Publicar', class:"mdl-button mdl-js-button mdl-button-- 
    raised mdl-button--colored" 

しかし、アプリケーションは、HTML形式で作成された最近のポストのショーにリダイレクトそれはフォームにとどまるべきです。

Rails 5.1.2のバージョンに問題があるのはわかりませんが、Rails 4の場合はtyping remoteしかありません。つまり、アプリケーションは送信アクション後にフォームにとどまりません。

ポストコントローラ:

class PostsController < ApplicationController 
    before_action :set_post, only: [:show, :edit, :update, :destroy] 

    # GET /posts 
    # GET /posts.json 
    def index 
    @posts = Post.all 
    end 

    # GET /posts/1 
    # GET /posts/1.json 
    def show 
    end 

    # GET /posts/new 
    def new 
    @post = Post.new 
    end 

    # GET /posts/1/edit 
    def edit 
    end 

    # POST /posts 
    # POST /posts.json 
    def create 
    @post = current_user.posts.new(post_params) 

    respond_to do |format| 
     if @post.save 
     format.html { redirect_to @post, notice: 'Post was successfully created.' } 
     format.json { render :show, status: :created, location: @post } 
     else 
     format.html { render :new } 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
     end 
    end 
end 

# PATCH/PUT /posts/1 
# PATCH/PUT /posts/1.json 
def update 
    respond_to do |format| 
    if @post.update(post_params) 
     format.html { redirect_to @post, notice: 'Post was successfully updated.' } 
     format.json { render :show, status: :ok, location: @post } 
    else 
     format.html { render :edit } 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
    end 
    end 
end 

# DELETE /posts/1 
# DELETE /posts/1.json 
def destroy 
    @post.destroy 
    respond_to do |format| 
    format.html { redirect_to posts_url, notice: 'Post was successfully destroyed.' } 
    format.json { head :no_content } 
    end 
end 

private 
# Use callbacks to share common setup or constraints between actions. 
def set_post 
    @post = Post.find(params[:id]) 
end 

# Never trust parameters from the scary internet, only allow the white list through. 
def post_params 
    params.require(:post).permit(:body) 
end 
end 

も私は、彼が作成された後、ポストの体を見るためにビューをレンダリングするshow.js.erbファイルを持っています。

show.js.erb

$('#posts').append("<%= render j @post %>") 

_post.haml

%article 
    =post.body 
+0

スタートをレンダリング前Jはそれがあるべきブラウザでエラーが発生しました。 – max

+0

コンソールでエラーが表示されず、ネットワークタブでGETとPOSTの2種類のXHR要求が送信されます。 –

答えて

0

を完了!ポストに、コントローラは、renderメソッドが不正な構文

1)ポストコントローラを持っているJS形式とshow.js.erbを応答するために不足している:format.jsを追加

def create 
    @post = current_user.posts.new(post_params) 

    respond_to do |format| 
    if @post.save 
     format.html { redirect_to @post, notice: 'Post was successfully created.' } 
     format.json { render :show, status: :created, location: @post } 
     format.js { render :show } 
    else 
     format.html { render :new } 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
     format.js { } 
    end 
end 

エンド

2)show.js.erb:JavaScriptコンソールをチェックして

$("posts").append(<%= j render @post %>)