【发布时间】:2017-02-23 01:54:24
【问题描述】:
我正在尝试为 GroupItem 记录播种,但我没有在 create 方法中提供正确的数据。
这是我在 rails 控制台中尝试过的:
irb(main):055:0> group = Group.first
Group Load (0.2ms) SELECT "groups".* FROM "groups" ORDER BY "groups"."id" ASC LIMIT ? [["LIMIT", 1]]
=> #<Group id: 1, groupable_type: "Legislator", name: "Cool Peeps", created_at: "2017-02-23 01:13:21", updated_at: "2017-02-23 01:13:21">
irb(main):056:0> person = Role.first
Role Load (0.2ms) SELECT "roles".* FROM "roles" ORDER BY "roles"."role_id" ASC LIMIT ? [["LIMIT", 1]]
=> #<Role role_id: 100, caucus: nil, congress_numbers: "[106]", current: false, description: "Representative for Wisconsin's 2nd congressional d...", district: 2, enddate: "2001-01-03", address: nil, contact_form: nil, fax: nil, office: nil, rss_url: nil, how: nil, leadership_title: nil, party: "Democrat", person_id: 400013, phone: nil, role_type: "representative", role_type_label: "Representative", senator_class: nil, senator_rank: nil, startdate: "1999-01-06", state: "WI", title: "Rep.", title_long: "Representative", website: "", created_at: "2017-02-23 01:11:08", updated_at: "2017-02-23 01:11:08">
irb(main):059:0> GroupItem.create(group_id: group.id, groupable_type: group.groupable_type, groupable_id: person.id)
(0.1ms) begin transaction
Legislator Load (0.1ms) SELECT "legislators".* FROM "legislators" WHERE "legislators"."id" = ? LIMIT ? [["id", 100], ["LIMIT", 1]]
Group Load (0.1ms) SELECT "groups".* FROM "groups" WHERE "groups"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
(0.1ms) rollback transaction
=> #<GroupItem id: nil, group_id: 1, groupable_type: "Legislator", groupable_id: 100, created_at: nil, updated_at: nil>
这里是设置:
class Group < ApplicationRecord
has_many :group_items
end
class GroupItem < ApplicationRecord
belongs_to :groupable, polymorphic: true
belongs_to :group
end
class Role < ApplicationRecord
belongs_to :person, foreign_key: :person_id
has_many :group_items, as: :groupable
#....
end
# migrations...
class CreateGroups < ActiveRecord::Migration[5.0]
def change
create_table :groups do |t|
t.string :name
t.timestamps
end
end
end
class CreateGroupItems < ActiveRecord::Migration[5.0]
def change
create_table :group_items do |t|
t.integer :group_id
t.references :groupable, polymorphic: true, index: true
t.timestamps
end
end
end
class CreateRoles < ActiveRecord::Migration[5.0]
def change
create_table :roles, :id => false do |t|
t.primary_key :role_id
#...
t.timestamps
end
end
end
这一定是关联的问题,这是我第一次尝试多态,所以我可能在那里搞砸了。
【问题讨论】:
-
如果你这样做
group_item.errors.full_messages.to_sentence会发生什么?另外,您的groupable_type是Group,但您的groupable_id是Person是否有意义? -
是的,我将多态关联放在了 Group 而不是 GroupItem 上。
标签: ruby-on-rails activerecord polymorphic-associations