这是我第一次来这里。我是铁杆新手。我正在建立一个有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链接在一起吗? 请教育我!!!!
答案 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
这样您就不需要任何其他操作,例如previous
和next