method
new
v7.2.3 -
Show latest stable
- Class:
ActiveRecord::FixtureSet::TableRow::PrimaryKeyError
new(label, association, value)public
No documentation available.
# File activerecord/lib/active_record/fixture_set/table_row.rb, line 43
def initialize(label, association, value)
super(<<~MSG)
Unable to set #{association.name} to #{value} because the association has a
custom primary key (#{association.join_primary_key}) that does not match the
associated table's primary key (#{association.klass.primary_key}).
To fix this, change your fixture from
#{label}:
#{association.name}: #{value}
to
#{label}:
#{association.foreign_key}: **value**
where **value** is the #{association.join_primary_key} value for the
associated #{association.klass.name} record.
MSG
end
end
def initialize(fixture, table_rows:, label:, now:)
@table_rows = table_rows
@label = label
@now = now
@row = fixture.to_hash
fill_row_model_attributes
end
def to_hash
@row
end
private
def model_metadata
@table_rows.model_metadata
end
def model_class
@table_rows.model_class
end
def fill_row_model_attributes
return unless model_class
fill_timestamps
interpolate_label
model_class.composite_primary_key? ? generate_composite_primary_key : generate_primary_key
resolve_enums
resolve_sti_reflections
end
def reflection_class
@reflection_class ||= if @row.include?(model_metadata.inheritance_column_name)
@row[model_metadata.inheritance_column_name].constantize rescue model_class
else
model_class
end
end
def fill_timestamps
# fill in timestamp columns if they aren't specified and the model is set to record_timestamps
if model_class.record_timestamps
model_metadata.timestamp_column_names.each do |c_name|
@row[c_name] = @now unless @row.key?(c_name)
end
end
end