2013-04-12 32 views
0

我希望在一行中全部选择所有QuizVersion型号信息和相关的Quiz型号。查询模型和加入相关模型

下面是我有这么远,它不输出任何Quiz信息,只是QuizVersion信息:

控制器:

class QuizzesController < ApplicationController 

    def getquiz 

     @myquiz = QuizVersion.joins(:Quiz).find([14,16]) 
    end 

end 

测验型号:

class Quiz < ActiveRecord::Base 
    set_table_name "quizzes" 
    set_primary_key "quiz_ID" 
    has_many :QuizVersions, :primary_key => "quiz_version_id", :foreign_key => "quiz_version_id" 
end 

QuizVersion型号:

class QuizVersion < ActiveRecord::Base 
    # attr_accessible :title, :body 
    set_primary_key "quiz_version_id" 
    belongs_to :Quiz, :primary_key => "quiz_id", :foreign_key => "quiz_id" 
end 

这里的结果信息:

--- 
- !ruby/object:QuizVersion 
    attributes: 
    quiz_version_id: 14 
    quiz_id: 18 
    quiz_name: Super Hero Quiz 
    intro: Take this quiz to find out which super hero you are most like! 
    email: '' 
    activated: 0 
    ip_address: 127.0.0.1 
    public: 0 
    quiz_type: '' 
    created_time: 1347360590 
- !ruby/object:QuizVersion 
    attributes: 
    quiz_version_id: 16 
    quiz_id: 18 
    quiz_name: Super Hero Quiz 
    intro: Take this quiz to find out which super hero you are most like! 
    email: '' 
    activated: 0 
    ip_address: 127.0.0.1 
    public: 0 
    quiz_type: '' 
    created_time: 1347706841 

回答

0

尝试:

class Quiz < ActiveRecord::Base 
    set_table_name "quizzes" 
    set_primary_key "quiz_ID" 
    has_many :quiz_versions 
end 

class QuizVersion < ActiveRecord::Base 
    # attr_accessible :title, :body 
    set_primary_key "quiz_version_id" 
    belongs_to :quiz 
end 

有了:

@myquiz = Quiz.includes(:QuizVersions).find([14,16]) 
+0

嗯,它不经过任何拉QuizVersions信息通过。任何想法为什么这可能是? – Luke

0

首先,通常关联使用小写定义Ť帽子你就可以使用:

QuizVersion.includes(:quiz).find([14,16]) 

希望帮助

编辑:我承认,我没有跑这来然而仔细检查...

+0

或者你可以试试'QuizVersion.where(id:[14,16])。joins(:quiz)' –

+0

这仍然只带回QuizVersion信息。这可能与我的类中的:foreign_key /:primary_key设置有关吗?我的测验和测验版本相关的是'quizzes.quiz_id' ='quiz_versions.quiz_id' – Luke

+0

这有可能是因为rails没有将数据添加到对象中。如果您在检索记录后调用'quiz_version.quiz',请检查控制台以查看它是否执行另一个查询 –