Ruby on rails 创建下一个/上一个链接rails 4
这是我第一次来这里。我不熟悉rails。我正在建立一个有项目和图片的网站,图片属于项目。 我有一个显示所有项目的列表操作,当我单击一个项目时,它会将我带到该项目。 在节目中,我想在顶部添加两个链接,将我带到上一个和下一个项目。 这是在我的项目模型中Ruby on rails 创建下一个/上一个链接rails 4,ruby-on-rails,ruby-on-rails-4,where-clause,Ruby On Rails,Ruby On Rails 4,Where Clause,这是我第一次来这里。我不熟悉rails。我正在建立一个有项目和图片的网站,图片属于项目。 我有一个显示所有项目的列表操作,当我单击一个项目时,它会将我带到该项目。 在节目中,我想在顶部添加两个链接,将我带到上一个和下一个项目。 这是在我的项目模型中 has_many :images accepts_nested_attributes_for :images, allow_destroy: true scope :sorted, order(id: :asc) def previous Proje
has_many :images
accepts_nested_attributes_for :images, allow_destroy: true
scope :sorted, order(id: :asc)
def previous
Project.first.where("projects.id > ?", :id).order(id: :desc)
end
def next
Project.first.where("projects.id < ?", :id).order(id: :asc)
end
我使用的是RAILS 4,在渲染show视图时出现以下错误
undefined method `where' for #<Project:0x007fadbcc66878>
的未定义方法“where”#
我不知道我做错了什么。可以把第一个和第二个锁在一起吗?
请教育我 您可以这样使用它:
Project.where("projects.id > ?", :id).order(id: :desc).first
您试图做的是将where
方法链接到Project
对象上,而不是链接到ActiveRecord::Relation
对象上(Project
对象的列表)
另一种解决方案如何:
def show
@project = Project.find(params[:id])
@previous = Project.where("id < ?", params[:id]).order(:id).first
@next = Project.where("id > ?", params[:id]).order(:id).first
end
这样,您就不需要任何其他操作,例如
previous
和next
尝试颠倒顺序:Project.where(…)。首先,我理解了我试图将where方法链接到一个对象而不是ActiveRecord::Relation的事实。但它仍然不起作用。我没有收到错误消息,但现在,当我将鼠标悬停在链接上时,我看到上一个链接正在发送id?3,下一个链接正在发送空id only project/show。当当前节目的project.id为1时,您当时不明白什么?出于某种原因,它没有拾取我当前的节目id。如果我编写此项目。其中(“id<?”,2)。顺序(id::asc)。首先,它工作正常。但是,当我给它一个动态值时,它不会拾取它。
Project.where("projects.id > ?", :id).order(id: :desc).first
def show
@project = Project.find(params[:id])
@previous = Project.where("id < ?", params[:id]).order(:id).first
@next = Project.where("id > ?", params[:id]).order(:id).first
end
if @previous
link_to "Previous", @previous