a = Reported.new
这很有效。经过修修补补。
a.profile = Profile.first
但这不是我想要的!我希望a.profile甚至存在。我想a.reported_by成为个人资料!我希望a.reported成为个人资料!
我想要的是
a.reported_by = Profile.last #or any such profile
a.reported = Profile.first #or any such profile
class Profile < ActiveRecord::Base
has_many :reported, dependent: :destroy
它没有报告的列,我也不确定实现它的正确方法。
class CreateReporteds < ActiveRecord::Migration
def change
create_table :reporteds do |t|
t.belongs_to :profile
t.integer :reported_by
t.string :reason
t.timestamps
end
end
end
答案 0 :(得分:1)
您的迁移似乎已关闭。我在迁移中从未见过t.belongs_to :something
- 不应该是t.integer :profile_id
吗? (我无法找到支持belongs_to
语法的文档。
如果您希望Reported#reported_by
返回Profile
,那么您需要一个reported_by_id
整数,而不是reported_by
整数。 Rails有一个约定,你应该让你引用的对象(在这种情况下,belongs_to :reported_by
关系)使用relationship_id
格式的外键。
然后你应该在课堂上有这个:
class Reported < ActiveRecord::Base
belongs_to :reported_by, class_name: "Profile"
end
这样就可以使用reported_by_id
作为Profile
对象的外键,但将其作为Reported#reported_by
返回。
然后:
class Profile < ActiveRecord::Base
has_many :reporteds, foreign_key: 'reported_by_id'
end
应该让你Profile#reporteds
您的迁移将如下所示:
class CreateReporteds < ActiveRecord::Migration
def change
create_table :reporteds do |t|
t.integer :reported_by_id
t.string :reason
t.timestamps
end
end
end