首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用id显示部分的Rails Ajax呈现

用id显示部分的Rails Ajax呈现
EN

Stack Overflow用户
提问于 2014-06-27 01:32:54
回答 2查看 1.1K关注 0票数 0

我正在创建一个简单的投票部分,但它没有更新,因为:

误差

代码语言:javascript
复制
NameError - undefined local variable or method `scribble' for 
  app/views/scribbles/vote.js.erb:1:in `_app_views_scribbles_vote_js_erb

唯一的投票方法工作没有任何问题,但它只是没有更新在视图中,因为上面的错误。我想我只需要知道如何将拼写对象传递到vote.js.erb?

_vote.html.erb

代码语言:javascript
复制
<%if current_user.voted_for?(scribble)%>
<a href="" id="vote_<%=scribble.id%>" name="promote" class="votes">
<div class="scribblevote"> 
    <i class="fa fa-cloud-upload"></i>  
    <%=scribble.votes.count%> <%= link_to "demote", vote_scribble_path(:id => scribble.id, :vote => false), remote: true, method: :post%> 
    </div></a>
<%else%>
<a href="" id="vote_<%=scribble.id%>" name="promote" class="votes">
<div class="scribblevote"> 
    <i class="fa fa-cloud-upload"></i>  
    <%=scribble.votes.count%> <%= link_to "promote", vote_scribble_path(:id => scribble.id, :vote => true), remote: true, method: :post%> 
    </div></a>
<%end%>

vote.js.erb

代码语言:javascript
复制
   $("#vote_<%=scribble.id%>").html("<%= escape_javascript( render(:partial => "scribbles/vote") ) %>");

控制器方法

代码语言:javascript
复制
  def vote
  @scribble = Scribble.find(params[:scribble_id])
  @vote = params[:vote]
  if @vote == "true"
    @v = :up
  else
    @v = :down
    current_user.unvote_for(@scribble)
  end
  current_user.vote(@scribble, :direction => @v)
    respond_to do |format|
      format.js{}
    end

scribble/_scribbles.html.erb

代码语言:javascript
复制
 <% @scribbles.each do |scribble| %>
 <%= render :partial=> "scribbles/vote", :locals => {scribble:  scribble}%>
 <%end%>
EN

回答 2

Stack Overflow用户

发布于 2014-06-27 01:38:55

代码语言:javascript
复制
$("#vote_<%=scribble.id%>")

vs

代码语言:javascript
复制
$("#vote_<%=@scribble.id%>")

您已经设置了@scribble,而不是名为scribble的本地变量

@scribblescribble不是一回事。

如果你从来不给一个叫做scribble的东西赋值,那么它就不存在.如果你想在任何地方使用..。然后它就会爆炸,告诉你它不存在。

除非故意设置一个名为@scribble的局部变量,否则需要在任何地方使用scribble

例:

代码语言:javascript
复制
  <%= render :partial=> "scribbles/vote", :locals => {scribble: @scribble}%>

请注意。在这段代码中,您将使用名为@scribble的变量,并设置aup一个局部变量(称为scribble),以供部分用户使用。

这个部分现在可以访问scribble

票数 1
EN

Stack Overflow用户

发布于 2014-06-27 01:41:28

您可以将一个本地部分传递给这样的部分:

代码语言:javascript
复制
render(partial: 'path_to_partial', locals: { var_in_partial: var_in_current_scope })

所以..。

代码语言:javascript
复制
render(partial: 'scribbles/vote', locals: { scribble: scribble })

它将在scribble部分中被称为_vote,我们从当前的作用域传入scribble

或者,您可以使用@scribble,它是在控制器中定义的,在当前的请求周期中对所有视图/部分都可用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24442713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档