Jquery 使用Rails通过Ajax更新分部代码
我试图在使用Ajax时更新rails部分,但遇到了一些问题。基本上我有一篇带有因果报应属性的帖子。用户可以通过向上投票和向下投票来消除帖子中的业力。我想允许用户使用Ajax异步更新post值,并且我遇到了NilClass错误,我希望您能帮助我解决这个问题。 我得到的错误是nil:NilClass的未定义方法'karma'(在我的_karma_value.erb文件中),我的文件如下所示。我完全卡住了 posts\u controller.rbJquery 使用Rails通过Ajax更新分部代码,jquery,ruby-on-rails,ruby,ajax,voting,Jquery,Ruby On Rails,Ruby,Ajax,Voting,我试图在使用Ajax时更新rails部分,但遇到了一些问题。基本上我有一篇带有因果报应属性的帖子。用户可以通过向上投票和向下投票来消除帖子中的业力。我想允许用户使用Ajax异步更新post值,并且我遇到了NilClass错误,我希望您能帮助我解决这个问题。 我得到的错误是nil:NilClass的未定义方法'karma'(在我的_karma_value.erb文件中),我的文件如下所示。我完全卡住了 posts\u controller.rb def add_karma # Sa
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
添加_karma.js.erb
$('#add_karma').html(
"<%= escape_javascript(render('_karma_value', post: @post)) %>");
$('add#karma').html(
"");
index.html.erb
...
<b>Karma:</b>
<%= render(:partial => 'karma_value', :locals => {:post => @post}) %> <br>
...
。。。
因果报应:
‘因果报应值’,:locals=>{:post=>@post})%>
...
_karma_value.erb
<% if !(post.karma.nil?) %>
<%= post.karma %>
<% end %>
你通过:locals=>{:post=>@post}
所以你应该使用post
而不是@post
内部的{u karma_value.erb部分是的,@post在部分将为零
因为,在渲染部分时,您提到局部变量post为@post。但部分使用@post
只需在该部分中使用post
在\u karma\u value.html.erb中
<% if !(post.karma.nil?) %>
<%= post.karma %>
<% end %>
为什么不在add_karma.js.erb
和index.html.erb
中使用相同的render:partial=>
命令?似乎您在add_karma.js.erb
中没有正确渲染部分,我之前尝试过,在您的评论后再次尝试过-但我收到相同的错误消息:未定义的方法'karma'for nil:nilclass一次您可以通过修改add_karma.js.erb文件的内容进行检查,如$('add#_karma').html(“'karma_value',:locals=>{:post=>@post})%%>”
。好吧,我这样做了,它成功了-(我不再收到未定义的方法错误)我想问题是我仍然在karma_value前面有下划线-但是现在它的渲染正确了-我无法让部分刷新(即,在刷新整个页面之前,该值保持不变)。有什么想法吗?你没有在index.html.erb中提到id为add_karma的DOM元素。如果你正在更新.js.erb文件中的适当元素,那么它肯定会反映.OMG这完全有效!我完全误解了javascript,认为$(“加上因果报应”).html指的是它所绑定的控制器操作,而不是DOM元素。将add_karma div添加到DOM中完全解决了问题。谢谢!我以前尝试过,在您的评论后再次尝试过-但我收到相同的错误消息:未定义方法'karma'for nil:NilClass-没有其他更改。然后@post
是nil位于index.html.erb。检查索引操作。