我得到了3個與會者,測試用戶和任務,與會者通過多對多關係連接測試用戶&任務。現在我的問題是:爲什麼可以通過「test.ids」檢索所有的id,而不是通過「test.testuser_ids」檢索testuser_ids(如下面的rails console輸出)?從集合中選擇外部值
schema.rb
ActiveRecord::Schema.define(version: 20141027151350) do
create_table "attendees", force: true do |t|
t.integer "task_id"
t.integer "testuser_id"
t.boolean "participate"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "tasks", force: true do |t|
t.string "title"
t.text "text"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "task_date"
t.boolean "participate"
end
create_table "testusers", force: true do |t|
t.string "username"
t.datetime "created_at"
t.datetime "updated_at"
end
end
軌控制檯:
irb(main):030:0> test = Attendee.all
Attendee Load (0.2ms) SELECT "attendees".* FROM "attendees"
=> #<ActiveRecord::Relation [#<Attendee id: 1, task_id: 1, testuser_id: 1, participate: true, created_at: "2014-10-29 16:29:43", updated_at: "2014-10-29 16:29:43">, #<Attendee id: 2, task_id: 1, testuser_id: 2, participate: true, created_at: "2014-10-29 16:29:43", updated_at: "2014-10-29 16:29:43">, #<Attendee id: 3, task_id: 1, testuser_id: 3, participate: nil, created_at: "2014-10-29 16:29:43", updated_at: "2014-10-29 16:29:43">, #<Attendee id: 4, task_id: 1, testuser_id: 4, participate: nil, created_at: "2014-10-29 16:29:43", updated_at: "2014-10-29 16:29:43">]>
irb(main):031:0> test.ids
(0.2ms) SELECT "attendees"."id" FROM "attendees"
=> [1, 2, 3, 4]
irb(main):032:0> test.testuser_ids
NoMethodError: undefined method `testuser_ids' for #<Attendee::ActiveRecord_Relation:0x00000106011ab0>
對你的答案只是一個簡短的評論。除了'Attendee.all.each {}',你可以簡單地使用'Attendee.pluck(:testuser_id)'。加載與會者的所有字段,然後遍歷所有記錄在這裏是一個很大的開銷。 – blelump 2014-10-29 17:06:17
不錯的建議:)我沒有寫出答案的表現,但是,你的評論肯定是有道理的。 – iMacTia 2014-10-29 17:13:18
非常感謝!工作得很好 - 即使我不明白爲什麼我無法以正常方式訪問測試數組: – 2014-10-30 10:27:15