将模型中的实例变量传递给Rails中的Controller

时间:2015-04-07 19:19:48

标签: ruby-on-rails ruby

基本应用。在本案例课程中尝试制作一个点击按钮并显示下一页的按钮。

在我的控制器中我有:

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错误。

3 个答案:

答案 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.nextLesson.previous返回整数而不是课程对象。如果您想继续使用nextprevious类方法,可以在视图中进行以下更改

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