2013-08-21 85 views
0

這是我第一次來這裏。我是新來的鐵軌。我正在建立一個有PROJECTS和IMAGES的網站,IMAGES屬於PROJECTS。 我有一個列表動作,顯示所有項目,當我點擊一個項目時,它將我帶到節目中。 在節目中,我想在頂部添加2個鏈接,將我帶到上一個和下一個PROJECTS。 這是在我的項目模型創建下一個/上一個鏈接導軌4

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 

我使用的軌道4和我渲染顯示視圖時出現以下錯誤

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

我不知道我在做什麼錯。 FIRST和WHERE可以鏈接在一起嗎? 請教育我!

+0

嘗試顛倒順序:'Project.where(...)。first' – adamdunson

回答

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存在(也可以是零,如果它的第一個或最後一個項目),並呈現鏈接/按鈕,如:

if @previous 
    link_to "Previous", @previous 

這樣,你不需要任何其他操作,如previousnext

+0

我明白我試圖鏈接某個對象上的where方法而不是ActiveRecord :: Relation。但它仍然無法正常工作。我沒有收到錯誤消息,但現在,當我將鼠標懸停在鏈接上時,我看到PREVIOUS正在發送ID?3,並且NEXT只發送空ID,僅用於項目/顯示。雖然當前節目的project.id爲1. –

+0

那麼你不明白什麼? – Zippie

+0

出於某種原因,它不會提取我當前的演出ID。如果我寫這個Project.where(「id <?」,2).order(id::asc).first它工作正常。但是,當我給它一個動態的價值時,它並沒有把它拿起來。 –

相關問題