Javascript I';我试图在我的Ruby应用程序中用AJAX重新加载一个div。div带有一个';如果条件为';

Javascript I';我试图在我的Ruby应用程序中用AJAX重新加载一个div。div带有一个';如果条件为';,javascript,html,ruby-on-rails,ruby,Javascript,Html,Ruby On Rails,Ruby,这是我在my pages.home.html.erb中的主页 <div id="favorites-div"> <% if current_user.voted_for? item %> <%= link_to '<i class="fas fa-minus-square plus_and_minus_button"></i>'.html_safe, item_unlike_path(item.id)%>

这是我在my pages.home.html.erb中的主页

  <div id="favorites-div">
    <% if current_user.voted_for? item %>
      <%= link_to '<i class="fas fa-minus-square plus_and_minus_button"></i>'.html_safe, item_unlike_path(item.id)%> 
    <% else %>    
      <%= link_to '<i class="fas fa-plus-square plus_and_minus_button"></i>'.html_safe, item_like_path(item.id)%>
    <% end %>
  </div>

  • 我用的是一个“作为表”的宝石

  • 我已将这两个get嵌套在我的项目中:路由: 获得“喜欢”,到:“物品#喜欢” 获取“不一样”,到:“项目#不一样”

  • 在我的项目控制器中,我定义了两种方法: def-like item=item.find(参数['item_id']) 由当前用户指定的item.u 重定向\u回退\u位置:根\u路径 结束

    def不像 item=item.find(参数['item_id']) item.unliked_按当前_用户列出 重定向\u回退\u位置:根\u路径 结束

  • 4.1这两个方法在整个ItemsController类中可用,它们不在任何CRUD方法中

    我的问题是: 1.你推荐什么JS函数?我是否在div中删除然后添加ID? 2.我要重新加载div吗?(.负载) 3.我是否需要在Rails应用程序中创建新文件来实现此方法


    非常感谢你的帮助

    在Rails中执行此操作的传统方法是在服务器上呈现一个新的HTML片段,并将其发送到JavaScript包装的浏览器,该浏览器知道如何在浏览器接收并计算新HTML时使用新HTML更新DOM

    为此,您需要设置以下几项:

    • 要动态渲染的片段应移动到局部,以便可以独立于任何视图进行渲染
    • 您需要包含元素上的ID,这样您就可以轻松地确定在何处插入重新呈现的HTML
    • 您需要一个
      .js
      视图,该视图可以呈现部分内容,以及更新DOM所需的JavaScript
    • 你应该使用远程链接
    您的HTML视图应该如下所示:

    # pages.home.html.erb
    
    <div id="favorites-div">
      <%= render 'votes' %>
    </div>
    
    # votes.html.erb
    
    <% if current_user.voted_for? item %>
      <%= link_to '<i class="fas fa-minus-square plus_and_minus_button"></i>'.html_safe, item_unlike_path(item), data: { remote: true }%> 
    <% else %>    
      <%= link_to '<i class="fas fa-plus-square plus_and_minus_button"></i>'.html_safe, item_like_path(item), data: { remote: true } %>
    <% end %>
    

    我建议将希望重新呈现的html放在单独的部分文件中。这个博客解释了一般的概念@meager,非常感谢你的帮助!你是一个king@meager,有几件我试过的东西不管用:@meage,有几件我试过的东西不管用:#=在标志1处。我把我的资料放在我的“共享”文件夹中,当我把:放在我的“home.html.erb”中时,我得到了以下信息:误导部分页面/投票,应用程序/投票2。因此,我将投票文件移到了“pages”文件夹中,而我的“home.html.erb”是,它在下面的代码中找不到“item”:。所以我把它改成了#items,它在我的页面控件中是#items=Item.all,但是它说:未定义的方法id,所以我在我的控件中输入了#Item=Item.find(params[:id])nowork@meager所以我认为错误是因为at.items是一个ActiveRecord:Relation对象,而不是一个model对象。。。所以它找不到对象的id。。。有什么线索可以解决这个问题吗?
    # unlike.js.erb
    
    $('#favorites-div').html('<%=j render 'votes' %>')