Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 使用Rails通过Ajax更新分部代码_Jquery_Ruby On Rails_Ruby_Ajax_Voting - Fatal编程技术网

Jquery 使用Rails通过Ajax更新分部代码

Jquery 使用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

我试图在使用Ajax时更新rails部分,但遇到了一些问题。基本上我有一篇带有因果报应属性的帖子。用户可以通过向上投票和向下投票来消除帖子中的业力。我想允许用户使用Ajax异步更新post值,并且我遇到了NilClass错误,我希望您能帮助我解决这个问题。 我得到的错误是nil:NilClass的未定义方法'karma'(在我的_karma_value.erb文件中),我的文件如下所示。我完全卡住了

posts\u 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
添加_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。检查索引操作。