2015-04-07 52 views
0

基本應用程序。嘗試製作一個按鈕,在本例中點擊並顯示下一頁。將實例變量從模型傳遞到控制器的Rails中

在我的控制,我有:

def show 
    @lesson = Lesson.find(params[:id]) 
end 

在我看來(show.html.erb)我有:

... 
<p><%= link_to 'Previous', Lesson.previous(@lesson) %></p> 
<p><%= link_to 'Next', Lesson.next(@lesson) %></p> 
... 

在我的模型,我有:

def self.next(current_lesson) 
    current_lesson.number + 1 
end 

def self.previous(current_lesson) 
    current_lesson.number - 1 
end 

我的模式包含一個數字列,它是一個整數。

但是,這個錯誤與'未定義的方法`to_model爲0:Fixnum',當我在控制檯運行@lesson時,它出現爲零。

我也試過這樣:

def self.next 
    current_lesson = Lesson.find(@lesson.id) 
    next_lesson = current_lesson.number + 1 
end 

def self.previous 
    current_lesson = Lesson.find(@lesson.id) 
    previous_lesson = current_lesson.number - 1 
end 

然而,這成功通過模型的實例變量,因爲在@lesson返回正確的值,但它不能調用該方法的控制檯。

想法?

編輯:另一種解決方案嘗試:

我想這個不斷變化的實例方法,而不是一類方法。所以在視圖中,我設置了@ lesson.previous和@ lesson.next。在模型中我這樣做:

def next 
    self.number + 1 
end 

def previous 
    self.number - 1 
end 

但是,唉,我又得到@instance零誤差。

+0

古怪,如果我通過從包含的任何視圖中的參數,實例變量的值丟失並返回零。所以,在我看來,我需要傳遞實例變量,但是一旦我接受該值作爲參數,它就會丟失。任何人都可以解釋我錯過了什麼嗎? – user3162553

+0

你的問題是你調用'link_to「Next」,12'(假設current_lesson.number是11),rails不知道該怎麼做。它應該做什麼? –

+0

好的。我目前的網址是說課/ 2我想下一個去上課/ 3和以前的課/ 1。這只是一種說法,讓我們去下一個編號的課程。 – user3162553

回答

0

self.next & self.previous返回整數而不是Lesson。讓他們返回下一個和上一個課程對象,它應該工作。即

Lesson.find_by_number(self.number-1) 
+0

謝謝!有效! – user3162553

0

在功能

def self.next 
    current_lesson = Lesson.find(@lesson.id) 
    next_lesson = current_lesson.number + 1 
end 

將返回一個Fixnum而不是教訓的對象。

如果你想用一個id返回第1課更高的你可能會更好做這樣的事情:

def next 
    Lesson.find(self.number + 1) 
end 
+0

這很有道理。但是,當我嘗試重新載入時說'找不到'id'= 1'的課程。 – user3162553

0

爲什麼你得到錯誤的原因是Lesson.nextLesson.previous返回整數,而不是課程對象。如果你想繼續使用nextprevious類的方法,你可以進行以下更改您的視圖

<p><%= link_to 'Previous', lesson_path(Lesson.previous(@lesson)) %></p> 
<p><%= link_to 'Next', lesson_path(Lesson.next(@lesson)) %></p> 
相關問題