【问题标题】:Nested Routes Showing All Records Instead of Instance Records显示所有记录而不是实例记录的嵌套路由
【发布时间】:2012-04-11 00:16:11
【问题描述】:

这些是相关模型:

class Repository < ActiveRecord::Base
   has_many :quizzes, :dependent => :destroy
   has_one :key, :dependent => :destroy

   accepts_nested_attributes_for :key, :quizzes
end

class Quiz < ActiveRecord::Base
   belongs_to :repository
   has_many :topics, :dependent => :destroy

   accepts_nested_attributes_for :topics
end

这是我的路线:

GqAPI::Application.routes.draw do
  resources :repositories do
    resources :quizzes
  end

  resources :quizzes

  resources :keys

  resources :topics

  resources :questions
end

当我尝试这个配置时,我得到了数据库中的所有测验,而不仅仅是我在尝试转到 /repositories/1/quizzes 时指定的 ID 的测验

关于为什么的任何想法?非常感谢您的宝贵时间

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 routes nested-attributes


    【解决方案1】:

    在您的QuizzesController 的索引操作中,您需要添加:

    def index
      @repository = Repository.find(params[:repository_id])
      @quizzes = @repository.quizzes
    end
    

    @repository 行将根据 URL 中的参数查找存储库。然后它将根据该存储库查找所有测验。

    然后在您的视图中,您可以在显示所有这些测验时循环播放它们。

    注意

    按照您目前设置路线的方式,您可以访问/quizzes 的页面,但听起来您并不希望这样做。如果是这种情况,您可以从您的 routes.rb 中删除 resources: quizzes(仅第二个,而不是嵌套的)。

    【讨论】:

    • 谢谢,成功了。但是,您的建议让我意识到我做错了……再次感谢!
    • 很高兴我能提供帮助。这是一个学习的过程。可能想在codeschool.com 上查看 Rails for Zombies,我刚开始时发现它非常有用。
    • 谢谢,我正在检查!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多