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

时间:2013-08-21 18:21:39

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

这是我第一次来这里。我是铁杆新手。我正在建立一个有PROJECTS和IMAGES的网站,IMAGES属于PROJECTS。 我有一个显示所有PROJECTS的列表操作,当我点击一个项目时它会带我去看演出。 在节目中我想在​​顶部添加2个链接,将我带到上一个和下一个PROJECTS。 这是我的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中的show动作

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

我正在使用RAILS 4,渲染节目视图时出现以下错误

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

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

1 个答案:

答案 0 :(得分:2)

你可以像这样使用它:

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(如果是第一个或最后一个项目,它们可以是nil)并渲染链接/按钮,例如:

if @previous
  link_to "Previous", @previous

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