0

我正在尝试在使用 Ajax 并遇到一些问题时更新 Rails 部分。基本上我有一个带有业力属性的帖子。用户可以投票赞成和反对,以从帖子中删除和删除 Karma。我想允许用户使用 Ajax 异步更新 post 值,并且我遇到了 NilClass 错误,我希望你能帮助我。我得到的错误是 nil:NilClass 的未定义方法“业力”(在我的 _karma_value.erb 文件中),我的文件如下所示。我完全卡住了!

post_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在部分中将为零。

因为,在渲染部分时,您提到了局部变量post作为@post。但是部分使用@post

只需在该部分中使用post即可。

_karma_value.html.erb

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

你通过:locals => {:post => @post}了,所以你应该使用post而不是@post里面 _karma_value.erb partial

于 2013-03-20T04:26:57.020 回答
0

为什么不在and中使用相同的render :partial =>命令?似乎您没有正确渲染.add_karma.js.erbindex.html.erbadd_karma.js.erb

于 2013-03-20T15:38:34.140 回答