【发布时间】:2015-04-07 19:19:48
【问题描述】:
基本应用。在本案例课程中尝试制作一个单击并显示下一页的按钮。
在我的控制器中,我有:
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
我的架构包含一个整数列。
但是,这会因 'undefined method `to_model' for 0:Fixnum' 而出错,当我在控制台中运行 @lesson 时,它会显示为 nil。
我也试过这个:
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 错误。
【问题讨论】:
-
奇怪的是,如果我从包含任何内容的视图中传递一个参数,实例变量的值就会丢失并返回 nil。因此,在我看来,我需要传递实例变量,但一旦我接受该值作为参数,它就会丢失。谁能解释我错过了什么?
-
您的问题是您正在调用
link_to "Next", 12(假设 current_lesson.number 为 11),而 rails 不知道该怎么做。它应该怎么做? -
好的。我当前的 URL 是课程/2,我想接下来进入课程/3 和以前的课程/1。这只是一种说去下一课的方式。
标签: ruby-on-rails ruby