【问题标题】:creating next/previous links rails 4创建下一个/上一个链接 rails 4
【发布时间】:2013-08-21 18:21:38
【问题描述】:

这是我第一次来这里。我是新来的铁路。我正在建立一个包含 PROJECTS 和 IMAGES 的站点,IMAGES 属于 PROJECTS。 我有一个显示所有项目的列表操作,当我单击一个项目时,它会将我带到节目中。 在节目中,我想在顶部添加 2 个链接,将我带到上一个和下一个项目。 这是在我的 PROJECTS 模型中

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

这是在我的显示操作视图中

=link_to('<< Previous',{:id => @project.previous})
=link_to('Next >>',{:id => @project.next})

这是我在 ProjectController 中的显示操作

def show
@project = Project.find(params[:id])
end

我使用的是 RAILS 4,在渲染显示视图时出现以下错误

undefined method `where' for #<Project:0x007fadbcc66878>

我不知道我做错了什么。 FIRST 和 WHERE 可以链接在一起吗? 请多多指教!!!

【问题讨论】:

  • 尝试颠倒顺序:Project.where(...).first

标签: ruby-on-rails ruby-on-rails-4 where-clause


【解决方案1】:

你可以这样使用它:

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 是否存在(如果它是第一个或最后一个项目,它们可以为零)并呈现链接/按钮,例如:

if @previous
  link_to "Previous", @previous

这样您就不需要任何其他操作,例如previousnext

【讨论】:

  • 我理解我试图将 where 方法链接到对象而不是 ActiveRecord::Relation 的事实。但它仍然无法正常工作。我没有收到错误消息,但现在,当我将鼠标悬停在链接上时,我看到 PREVIOUS 正在发送 id?3 而 NEXT 正在发送空 id 仅项目/节目。而当前节目的 project.id 为 1。
  • 你当时有什么不明白的?
  • 由于某种原因,它没有获取我当前的节目 ID。如果我写这个 Project.where("id
猜你喜欢
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 2020-06-27
  • 2018-07-30
相关资源
最近更新 更多