我正在尝试使用Ajax更新rails部分并遇到一些麻烦。基本上我有一个具有Karma属性的帖子。用户可以投票并投票决定从帖子中删除Karma。我想允许用户使用Ajax异步更新post值,并且我遇到了NilClass错误,我希望你可以帮助我。 我得到的错误是未定义的方法`业力'对于nil:NilClass(在我的_karma_value.erb文件中),我的文件如下所示。我完全卡住了!
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 %>
答案 0 :(得分:1)
是的, @post 在部分内容为零。
因为,在渲染部分时,您已将局部变量发布称为 @post 。但是在部分中使用 @post 。
只需在该部分中使用发布。
_karma_value.html.erb
中的
<% if !(post.karma.nil?) %>
<%= post.karma %>
<% end %>
答案 1 :(得分:0)
您通过了:locals => {:post => @post}
,因此您应该在_karma_value.erb partial
post
代替@post
答案 2 :(得分:0)
为什么不在render :partial =>
和add_karma.js.erb
使用相同的index.html.erb
命令?您似乎无法正确渲染add_karma.js.erb
中的部分内容。