我正在尝试创建一个索引页面,按字母顺序显示所有类别 ,但前提是该文章已被标记为该类别。一篇文章可以有很多类别。
首次加载索引页面时,它只显示2个类别。索引页面底部有一个“加载更多”的ajax按钮来加载接下来的两个类别。
我认为我如何分配categories变量有一个错误。 ajax按钮有效,但显示相同的2个类别名称(例如“A”和“B”,而不是下一个2(例如“C”和“D”)。
类别控制器
public void OnPressStarted()
{
if (PressStarted != null)
{
PressStarted(this, EventArgs.Empty);
}
}
public void OnPressEnded()
{
if (PressEnded != null)
{
PressEnded(this, EventArgs.Empty);
}
}
类别/ index.html.erb
def index
if params[:name]
@categories = Category.with_articles.order('name ASC').where('name> ?', params[:name]).limit(2)
else
@categories = Category.with_articles.order('name ASC').limit(2)
end
respond_to do |format|
format.html
format.js
end
end
schema.rb
<%= render @categories %>
模型/ category.rb
create_table "categories", force: :cascade do |t|
t.string "name"
end
create_table "article_categories", force: :cascade do |t|
t.integer "article_id"
t.integer "category_id"
end
修改 的模型/ article_category.rb
class Category < ApplicationRecord
has_many :article_categories
has_many :articles, through: :article_categories
def self.with_articles
includes(:articles).where.not(articles: { id: nil })
end
end
模型/ article.rb
class ArticleCategory < ActiveRecord::Base
belongs_to :article
belongs_to :category
end
答案 0 :(得分:1)
试试这个:
def index
@categories = Category.articles.order('name ASC').limit(2)
respond_to do |format|
format.html
format.js
end
end
我认为这会解决,您可以从模型category
中删除函数with_articles
。
答案 1 :(得分:1)
你错过了offset
的事情。您需要维护param
说offset
并将其发送给每个ajax请求
Offset允许您在跳过后获取限制函数中传递的n - the number of records
- 记录数passed in
offset`函数。
所以,理想情况下从数据库中获取前两个记录后,您需要通过跳过前两个记录来获取其他两个记录,因此您需要将offset
作为2传递给参数
def index
if params[:name]
@categories = Category.with_articles.order(:name).where('name> ?', params[:name]).limit(2).offset(params[:offset].to_i)
else
@categories = Category.with_articles.order(:name).limit(2).offset(params[:offset].to_i)
end
respond_to do |format|
format.html
format.js
end
end
希望这有帮助
答案 2 :(得分:0)
你的代码看起来很好但似乎就像你让它变得更复杂。
def index
@categories = Category.articles.where('articles.id > ?',params[:id]).order('name ASC').limit(2)
respond_to do |format|
format.html
format.js
end
end
在Ajax调用中,您可以发送上一篇文章的id
。希望它有效!