Ruby on Rails – Rails渲染部分可以重复使用吗?

2026-04-11 15:031阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计882个文字,预计阅读时间需要4分钟。

Ruby on Rails – Rails渲染部分可以重复使用吗?

Rails 输出我的文章两次。目前,我只是循环文章集合并输出它。最初,我以为这是 AJAX 的问题,但我已经删除了 application.js 和 index.js.erb 文件中的所有 JavaScript,但它仍然重复输出两次。我甚至通过登录 Rails+c 来尝试解决这个问题。

Ruby on Rails – Rails渲染部分可以重复使用吗?

Rails输出我的文章两次.目前,我只是循环文章集合并输出它.起初我认为它是 AJAX的一个问题,但我删除了application.js和index.js.erb文件中的所有 javascript,它仍然重复两次.我还通过登录Rails c并运行Articles.all.count来检查数据库,并返回正确的文章数.我也重置了数据库并再次尝试使用相同的结果.

文章#指数

<h1 class="text-center">talks</h1> <div id="articles-list" class="small-12 small-centered columns"> <%= render @articles %> </div> <%= will_paginate @articles %>

_article.html.erb partial:

<% @articles.each_with_index do |article, index| %> <%= index %> <dl class="individual-article"> <dt><%= article.title %> <% if current_user.try(:admin) %> | <%= link_to 'Edit', edit_article_path(article) %> <% end %><br> <%= raw article.tags.map(&:name).map { |t| link_to t, tag_path(t), class: get_class(t) }.join(', ') %> </dt> <dd><%= truncate(article.body.html_safe, length: 200) %> <%= link_to 'more', article_path(article) %> </dd> </dl>

我把索引打开,如果它正在重复,它就是.如果我有三篇文章,它将输出0 1 2 0 1 2作为indeces.所以我知道它会被执行两次.

物品管理员

def index if params[:tag] @articles = Article.tagged_with(params[:tag]).order('created_at DESC').paginate(page: params[:page], per_page: 3) else @articles = Article.order('created_at DESC').paginate(page: params[:page], per_page: 3) end end

我有一些AJAX用于无限滚动,这可能是问题所在.除非我删除整个js文件,否则它具有相同的行为.

index.js.erb的

$('#articles-list').append('<%= escape_javascript render(@articles) %>'); $('.pagination').replaceWith('<%= escape_javascript will_paginate(@articles) %>');

的application.js

$(document).ready(function() { if ($('.pagination').length) { $(window).scroll(function() { var url = $('.pagination .next_page').attr('href'); if (url && $(window).scrollTop() > $(document).height() - $(window).height() - 50) { $('.pagination').text("Please Wait..."); return $.getScript(url); } }); return $(window).scroll(); } });

我对Rails相对较新,并希望了解如何防止这种情况两次执行.

编辑

部分服务器日志:

... Article Load (0.2ms) SELECT "articles".* FROM "articles" ORDER BY created_at DESC LIMIT 3 OFFSET 0 ... Rendered articles/_article.html.erb (6.5ms) Rendered articles/index.html.erb within layouts/application (12.8ms) Rendered layouts/_header.html.erb (0.4ms) 您正在将集合传递给partial.这将为@articles中的每个元素渲染部分时间.
在部分中,然后再次在@articles上循环.
如果您不需要索引,请将该循环置于partial之外或删除它.
这些都有效:

文章#指数

<div id="articles-list" class="small-12 small-centered columns"> <% @articles.each_with_index do |article, index| %> <%= render 'article', article: article, index: index %> <%end%> </div>

_article.html.erb partial:

<%= index %> <dl class="individual-article"> <dt><%= article.title %> <% if current_user.try(:admin) %> | <%= link_to 'Edit', edit_article_path(article) %> <% end %><br> <%= raw article.tags.map(&:name).map { |t| link_to t, tag_path(t), class: get_class(t) }.join(', ') %> </dt> <dd><%= truncate(article.body.html_safe, length: 200) %> <%= link_to 'more', article_path(article) %> </dd> </dl>

或者如果你不需要partial中的索引,请保持index.html,就像现在一样,只需从partial中删除循环:

_article.html.erb partial:

<dl class="individual-article"> <dt><%= article.title %> <% if current_user.try(:admin) %> | <%= link_to 'Edit', edit_article_path(article) %> <% end %><br> <%= raw article.tags.map(&:name).map { |t| link_to t, tag_path(t), class: get_class(t) }.join(', ') %> </dt> <dd><%= truncate(article.body.html_safe, length: 200) %> <%= link_to 'more', article_path(article) %> </dd>

本文共计882个文字,预计阅读时间需要4分钟。

Ruby on Rails – Rails渲染部分可以重复使用吗?

Rails 输出我的文章两次。目前,我只是循环文章集合并输出它。最初,我以为这是 AJAX 的问题,但我已经删除了 application.js 和 index.js.erb 文件中的所有 JavaScript,但它仍然重复输出两次。我甚至通过登录 Rails+c 来尝试解决这个问题。

Ruby on Rails – Rails渲染部分可以重复使用吗?

Rails输出我的文章两次.目前,我只是循环文章集合并输出它.起初我认为它是 AJAX的一个问题,但我删除了application.js和index.js.erb文件中的所有 javascript,它仍然重复两次.我还通过登录Rails c并运行Articles.all.count来检查数据库,并返回正确的文章数.我也重置了数据库并再次尝试使用相同的结果.

文章#指数

<h1 class="text-center">talks</h1> <div id="articles-list" class="small-12 small-centered columns"> <%= render @articles %> </div> <%= will_paginate @articles %>

_article.html.erb partial:

<% @articles.each_with_index do |article, index| %> <%= index %> <dl class="individual-article"> <dt><%= article.title %> <% if current_user.try(:admin) %> | <%= link_to 'Edit', edit_article_path(article) %> <% end %><br> <%= raw article.tags.map(&:name).map { |t| link_to t, tag_path(t), class: get_class(t) }.join(', ') %> </dt> <dd><%= truncate(article.body.html_safe, length: 200) %> <%= link_to 'more', article_path(article) %> </dd> </dl>

我把索引打开,如果它正在重复,它就是.如果我有三篇文章,它将输出0 1 2 0 1 2作为indeces.所以我知道它会被执行两次.

物品管理员

def index if params[:tag] @articles = Article.tagged_with(params[:tag]).order('created_at DESC').paginate(page: params[:page], per_page: 3) else @articles = Article.order('created_at DESC').paginate(page: params[:page], per_page: 3) end end

我有一些AJAX用于无限滚动,这可能是问题所在.除非我删除整个js文件,否则它具有相同的行为.

index.js.erb的

$('#articles-list').append('<%= escape_javascript render(@articles) %>'); $('.pagination').replaceWith('<%= escape_javascript will_paginate(@articles) %>');

的application.js

$(document).ready(function() { if ($('.pagination').length) { $(window).scroll(function() { var url = $('.pagination .next_page').attr('href'); if (url && $(window).scrollTop() > $(document).height() - $(window).height() - 50) { $('.pagination').text("Please Wait..."); return $.getScript(url); } }); return $(window).scroll(); } });

我对Rails相对较新,并希望了解如何防止这种情况两次执行.

编辑

部分服务器日志:

... Article Load (0.2ms) SELECT "articles".* FROM "articles" ORDER BY created_at DESC LIMIT 3 OFFSET 0 ... Rendered articles/_article.html.erb (6.5ms) Rendered articles/index.html.erb within layouts/application (12.8ms) Rendered layouts/_header.html.erb (0.4ms) 您正在将集合传递给partial.这将为@articles中的每个元素渲染部分时间.
在部分中,然后再次在@articles上循环.
如果您不需要索引,请将该循环置于partial之外或删除它.
这些都有效:

文章#指数

<div id="articles-list" class="small-12 small-centered columns"> <% @articles.each_with_index do |article, index| %> <%= render 'article', article: article, index: index %> <%end%> </div>

_article.html.erb partial:

<%= index %> <dl class="individual-article"> <dt><%= article.title %> <% if current_user.try(:admin) %> | <%= link_to 'Edit', edit_article_path(article) %> <% end %><br> <%= raw article.tags.map(&:name).map { |t| link_to t, tag_path(t), class: get_class(t) }.join(', ') %> </dt> <dd><%= truncate(article.body.html_safe, length: 200) %> <%= link_to 'more', article_path(article) %> </dd> </dl>

或者如果你不需要partial中的索引,请保持index.html,就像现在一样,只需从partial中删除循环:

_article.html.erb partial:

<dl class="individual-article"> <dt><%= article.title %> <% if current_user.try(:admin) %> | <%= link_to 'Edit', edit_article_path(article) %> <% end %><br> <%= raw article.tags.map(&:name).map { |t| link_to t, tag_path(t), class: get_class(t) }.join(', ') %> </dt> <dd><%= truncate(article.body.html_safe, length: 200) %> <%= link_to 'more', article_path(article) %> </dd>