在rails 3中具有浅路由的嵌套资源

时间:2012-05-29 19:43:01

标签: ruby-on-rails ruby ruby-on-rails-3

我一直在使用rails一段时间,但我还没有克服使用3级深度嵌套资源的问题。当我在笔记页面上时,我想将课程名称链接到课程和课程,但是rails一直给我一个错误。

我有3个模型课程,课程和笔记。课程有很多课程和课程属于一个班级。课程有许多笔记和笔记属于一门课程。我将在下面解释。

class.rb

 has_many :courses

course.rb

belongs_to :class
has_many :schedules
has_many :notes, :through => :schedules

note.rb

has_many :schedules
has_many :courses, :through => :schedules

schedule.rb

belongs_to :course
belongs_to :note

的routes.rb

  resources :classes, :shallow => true do
    resources :courses do
      resources :notes
    end
  end

index.html.erb

<% @notes.each do |note| %>
  <% note.courses.each do |course| %>
    <%= note_class(course) %>
  <% end %>
<% end %>

notes_helper.rb

  def note_class(course)
      link_to course.course_name, class_course_path(class, course)
  end

浅路由效果很好,除非当rails给我一个错误'未定义的局部变量或方法`class'for'。我认为上面的代码是正确的,但我不确定为什么它不能正常工作。有关如何将课程链接到类似mysite.com/classes/1/course/3的网址的任何建议?

1 个答案:

答案 0 :(得分:0)

我意识到这个问题有一段时间被问过,但我认为因为它没有被“回答”,我会试一试。

一些事情。首先,你在helper方法中遇到的错误是没有引用class实例的结果。您只是将course对象作为参数传递。鉴于上述协会

,这将有效

<强> notes_helper.rb

def note_class(course)
  link_to course.course_name, class_course_path(course.class, course)
end

其次,如其中一条评论所述,class是Ruby中的保留关键字,因此最好避免将其用于模型和关联。欢呼声。