Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 创建下一个/上一个链接rails 4_Ruby On Rails_Ruby On Rails 4_Where Clause - Fatal编程技术网

Ruby on rails 创建下一个/上一个链接rails 4

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

这是我第一次来这里。我不熟悉rails。我正在建立一个有项目和图片的网站,图片属于项目。 我有一个显示所有项目的列表操作,当我单击一个项目时,它会将我带到该项目。 在节目中,我想在顶部添加两个链接,将我带到上一个和下一个项目。 这是在我的项目模型中

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