我有3个参与者,测试用户和任务,参与者通过多对多关系连接测试用户和任务。现在我的问题:为什么可以通过“test.ids”检索所有ID,而不是通过“test.testuser_ids”检索testuser_ids(如下面的rails控制台输出中所示)?
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
rails console:
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>
答案 0 :(得分:1)
是不可能的,因为默认情况下Rails不会按照您的意愿提供它。 即使我不确定我有什么想做的,但我认为其中一个是你的解决方案:
Attendee.all.first.testusers.ids
这将获得特定与会者的所有testusers ID。 相反,如果您想要所有与会者的所有testusers ID,您将需要一个循环:
res = []
Attendee.all.each { |a| res += a.testusers.ids }
res.uniq
答案 1 :(得分:0)
您似乎错过了Attendee
模型的关联。它应该有:
class Attendee
belongs_to :testuser
end
此外,由于Attendee.first.testuser_ids
表格有attendees
,因此无法致电testuser_id
。否则,请更改模型架构。