基本应用。在本案例课程中尝试制作一个点击按钮并显示下一页的按钮。
在我的控制器中我有:
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&#39; 0:Fixnum&#39;当我在控制台中运行@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 nil错误。
答案 0 :(得分:0)
self.next&amp; self.previous返回整数而不是Lesson。让它们返回下一个和前一个Lesson对象,它应该工作。即
Lesson.find_by_number(self.number-1)
答案 1 :(得分:0)
在功能
中def self.next
current_lesson = Lesson.find(@lesson.id)
next_lesson = current_lesson.number + 1
end
您将返回Fixnum而不是Lesson对象。
如果您想要返回ID为1的课程,您可能最好做以下事情:
def next
Lesson.find(self.number + 1)
end
答案 2 :(得分:0)
您收到错误的原因是Lesson.next
和Lesson.previous
返回整数而不是课程对象。如果您想继续使用next
和previous
类方法,可以在视图中进行以下更改
<p><%= link_to 'Previous', lesson_path(Lesson.previous(@lesson)) %></p>
<p><%= link_to 'Next', lesson_path(Lesson.next(@lesson)) %></p>