2017-02-10 7 views
0

を作成していますし、コメントのための私のshowアクションにモーダルレール5未定義のテンプレートエラー

に表示されるshowアクションにコメントを追加します我々はコメント

と一緒にアクションを表示]ボタンをクリックした後、この

<%= link_to fetch_selfy_path(selfie.id), class: "show_lightbox", data: { featherlight: "mylightbox" }, remote: true do %> 

     <img class="card-main-image" src="<%= selfie.photo.url if selfie.photo.url %>" alt="Image Alt text"> 
    <% end %> 
<div class="lightbox" id="lightbox"> 
    <%=render partial: "selfies/show", locals: { selfie: selfie } %> 
</div> 

ようモーダルてショーを得るカント私はAJAXを通じて

addCommentToSelfie("<%= j render "selfies/comments/comment", locals: { comment: @comment } %>"); 

この戻り、

ActionView::Template::Error (undefined local variable or method `comment' for #<#<Class:0x007f207400c648>:0x00557937265830>): 
    1: 
    2: <p> <b><%= comment.user.username %>: </b><%= comment.body %></p> 

app/views/selfies/comments/_comment.html.erb:2:in `_app_views_selfies_comments__comment_html_erb__4557429192479440105_46989553619000' 

のエラーを新しいcommectを注入しようとするまで

<p> <b><%= comment.user.username %>: </b><%= comment.body %></p> 

のような部分的なルックスは、このすべてが正常に動作します

<% selfie.comments.each do |comment| %> 
       <%= render partial: "selfies/comments/comment", locals: { comment: comment } %> 
      <% end %> 

私は別のメドンドを試しましたが、同じエラーが発生しました

答えて

1

引用符を混ぜて別の構文を混在させています。あなたはまた、partial:を使用、またはその両方この場合には省略しなければなりませんlocals: ...使用している場合...

addCommentToSelfie("<%= j render 'selfies/comments/comment', comment: @comment %>"); 
+0

はそれを修正したがスムーズに動作します

def create @comment = @selfie.comments.new(comment_params) @comment.user = current_user @comment.save respond_to do |format| format.js end 

そこからまだ#のために同じエラー 'ActionView ::テンプレート::エラー(未定義のローカル変数やメソッド'コメント」を取得<#<クラス: 0x007f207400c648>:0x007f209e0295c0>): 1: 2:

<%= comment.user.username%>:<%= comment。ボディ%>

「 –

+0

@geniuskidkanyiああ、私の更新を見てください。 – Iceman

+0

は 'ActionView :: Template :: Error(nil:NilClassの未定義メソッド' user ')を取得しています: ' –

-1

あなたは私たちの行動を示すことができ、コメントコントローラで作成しますか?通常、私はそのようなことをします。

def create 
    @comment = @selfie.comments.new(comment_params) 
    @comment.user = current_user 
    respond_to do |format| 
     if @comment.save 
     format.html { redirect_to @comment } 
     format.js 
     else 
     render :new 
     end 
    end 
    end 

は、その後、あなたのビューでは、あなたのJSが含まれているファイルのコメント/ create.js.erbている必要があります

addCommentToSelfie("<%= j render 'selfies/comments/comment', comment: @comment %>"); 

をそして今@commentが存在している必要があります。回答に基づいて

+0

は、これは私のコメントコントローラ '' 'ルビー DEF @comment = @ selfie.comments.new(comment_params) @ comment.user = CURRENT_USER @' '' comment.saveエンド –

+0

を作成し、私が編集した私の答えです(私もformat.jsonとformat.jsの間でミスを犯しました)。まず、ajaxを使わないでコメントを投稿するべきです。すべてが機能することを確認する。それから、あなたがしたと思われるように、showアクションではなく、createアクション内にrespond_to ... format.jsを追加する必要があります。コメントコントローラー全体を表示すると本当に役に立ちます。 – devoh

+0

これは私のコメントコントローラ全体 '' ' クラスSelfies :: CommentsController

0

は、上記の提供、私はインスタント使用して波平のでsecondyがエラーゼロのクラスを得ていた

$("#comments").append("<%= j render partial: 'selfies/comments/comment', locals: { comment: @comment } %>"); 

に私のcreat.js.erbをきれいに最初に私の問題

を解決することができました

def create 
    comment = @selfie.comments.new(comment_params) 
    comment.user = current_user 
    comment.save 

    end 

:から私のコメントコントローラ

内の変数TO:すべてが

関連する問題