【问题标题】:nested resources with shallow routes in rails 3rails 3中具有浅层路线的嵌套资源
【发布时间】:2012-05-29 19:43:00
【问题描述】:

我已经使用 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 之类的 URL 的任何建议?

【问题讨论】:

  • 您在resources :courses 之后缺少do 吗?
  • @PinnyM 对此感到抱歉,但在我的 routes.rb 文件中已更正
  • class 是 ruby​​ 中的关键字,也许可以尝试为您的模型使用其他名称,这样不会给您带来此问题...

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


【解决方案1】:

我知道不久前有人问过这个问题,但我想既然它还没有得到'回答',我会试一试。

几件事。首先,您在辅助方法中遇到的错误是由于没有引用 class 实例造成的。您只是将 course 对象作为参数传递。考虑到您上面的关联,这将起作用

notes_helper.rb

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

其次,正如其中一个 cmets 所述,class 是 Ruby 中的保留关键字,因此最好避免将其用于模型和关联。干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2012-03-07
    相关资源
    最近更新 更多