0

Ajaxを使用しているときにレールの一部を更新しようとしていますが、問題が発生しています。基本的に、私はカルマ属性を持つ投稿を持っています。ユーザーは投票して投票し、投票してカルマを投稿から削除することができます。ユーザーがAjaxを使用して投稿値を非同期的に更新できるようにしたいのですが、NilClassエラーが発生しました。エラーimgetingは、nil:NilClass(私の_karma_value.erbファイル内)の未定義のメソッド `karma'であり、私のファイルは次のようになります。私は完全に立ち往生しています!

posts_controller.rb

   def add_karma
     # Save the page that the request came from
     session[:initial_page] ||= request.referer

     @post = Post.find(params[:id])
     @post.karma = @post.karma + 1
     @post.update_attributes(params[:post])

     respond_to do |format|
       format.html { redirect_to session[:initial_page] }  #redirect back to requesting page
       format.json { head :no_content }
       format.js {}
     end   
   end

add_karma.js.erb

   $('#add_karma').html(
     "<%= escape_javascript(render('_karma_value', post: @post)) %>");

index.html.erb

...
<b>Karma:</b> 
        <%= render(:partial => 'karma_value', :locals => {:post => @post}) %>  <br>
...

_karma_value.erb

<% if !(post.karma.nil?) %>
    <%= post.karma %>
<% end %>
4

3 に答える 3

1

はい、部分的に@postは nil になります。

部分的なレンダリング中に、ローカル変数post@postとして言及したためです。ただし、@postを部分的に使用します。

そのパーシャルでポストを使用するだけです。

_karma_value.html.erb

<% if !(post.karma.nil?) %>
  <%= post.karma %>
<% end %>
于 2013-03-20T04:27:05.027 に答える
0

と の両方でまったく同じrender :partial =>コマンドを使用しないのはなぜですか? のパーシャルを正しくレンダリングしていないようです。add_karma.js.erbindex.html.erbadd_karma.js.erb

于 2013-03-20T15:38:34.140 に答える
0

_karma_value.erbパーシャル内の代わりに:locals => {:post => @post}使用する必要があります。post@post

于 2013-03-20T04:26:57.020 に答える