Javascript I';我试图在我的Ruby应用程序中用AJAX重新加载一个div。div带有一个';如果条件为';
这是我在my pages.home.html.erb中的主页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)%>
<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>
非常感谢你的帮助 在Rails中执行此操作的传统方法是在服务器上呈现一个新的HTML片段,并将其发送到JavaScript包装的浏览器,该浏览器知道如何在浏览器接收并计算新HTML时使用新HTML更新DOM 为此,您需要设置以下几项:
- 要动态渲染的片段应移动到局部,以便可以独立于任何视图进行渲染
- 您需要包含元素上的ID,这样您就可以轻松地确定在何处插入重新呈现的HTML
- 您需要一个
视图,该视图可以呈现部分内容,以及更新DOM所需的JavaScript.js
- 你应该使用远程链接
# 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' %>')