【发布时间】:2016-04-02 04:23:59
【问题描述】:
有3个嵌套模型(见底部的模型文件)
- :用户
- :测验,
- :问题
是否可以通过user 渲染questions?
可以通过user 渲染quizzes。但是我不知道为什么每个测验的问题也不包括在内...
-
{{user}}呈现该用户的测验
{"id":1,"email":"example@example.com","username":"jim","quizzes":[{"id":1,"name":"quiz1", "user_id":1},{"id":2,"name":"quiz2","user_id":1},]}
- 但
{{user.quizzes}}只呈现测验,而不是那些测验的问题。
[{"id":1,"name":"quiz1","user_id":1},{"id":2,"name":"quiz2","user_id":1}]
- 另外,
{{user.questions}}将呈现一个空白数组[]。
所以users 和questions 之间缺少连接,或者它只能渲染低一级的对象?
user.rb
class User < ActiveRecord::Base
has_many :questions
has_many :quizzes
def as_json(options = {})
super(options.merge(include: [:quizzes, :questions]))
end
end
quiz.rb
class Quiz < ActiveRecord::Base
belongs_to :user
has_many :questions
def as_json(options = {})
super(options.merge(include: [:user, :questions]))
end
end
question.rb
class Question < ActiveRecord::Base
belongs_to :user
belongs_to :quiz
def as_json(options = {})
super(options.merge(include: [:user, :quiz]))
end
end
请记住,我对数据库的经验并不丰富。任何建议将不胜感激。
==============
更新
==============
下面添加了架构。
ActiveRecord::Schema.define do
create_table "questions", force: :cascade do |t|
t.string "ask"
t.string "answer"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
t.integer "quiz_id"
t.integer "easy_count"
t.integer "diff_count"
end
add_index "questions", ["quiz_id"], name: "index_questions_on_quiz_id"
add_index "questions", ["user_id"], name: "index_questions_on_user_id"
create_table "quizzes", force: :cascade do |t|
t.string "name"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "quizzes", ["user_id"], name: "index_quizzes_on_user_id"
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
t.string "username"
end
add_index "users", ["email"], name: "index_users_on_email", unique: true
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
add_index "users", ["username"], name: "index_users_on_username", unique: true
end
【问题讨论】:
-
是否有任何特殊原因需要将
User直接连接到Question,而不是通过Quiz间接连接? -
我正在尝试在
site.io/users/:id页面上呈现汇总问题数据,每个测验。所以我可以做类似ng-repeat="quiz in quizzes"的事情,然后渲染{{quiz.questions}},但这也不会渲染任何东西......
标签: ruby-on-rails angularjs json