2015-04-07 122 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> 
相关问题