lib/ampere/model.rb in ampere-1.2.2 vs lib/ampere/model.rb in ampere-1.2.3
- old
+ new
@@ -313,28 +313,28 @@
define_method(:"#{field_name}=") do |val|
return nil if val.nil?
# Set attr with key where referred model is stored
self.send("#{field_name}_id=", val.id)
# Also update that model's hash with a pointer back to here
- val.send("#{my_klass_name}_id=", self.send("id"))
+ val.send("#{my_klass_name}_id=", self.send("id")) if val.respond_to?("#{my_klass_name}_id=")
end
end
# Defines a has_many relationship with another model. See the README for more details.
def has_many(field_name, options = {})
klass_name = (options[:class] or options['class'] or field_name.to_s.gsub(/s$/, ''))
my_klass_name = to_s.downcase
define_method(:"#{field_name}") do
- (Ampere.connection.smembers(key_for_has_many(to_s.downcase, self.id, field_name))).map do |id|
+ (Ampere.connection.smembers(key_for_has_many(my_klass_name, self.id, field_name))).map do |id|
eval(klass_name.to_s.capitalize).find(id)
end
end
define_method(:"#{field_name}=") do |val|
val.each do |v|
Ampere.connection.multi do
- Ampere.connection.sadd(key_for_has_many(to_s.downcase, self.id, field_name), v.id)
+ Ampere.connection.sadd(key_for_has_many(my_klass_name, self.id, field_name), v.id)
# Set pointer for belongs_to
Ampere.connection.hset(key_for_find(v.class, v.id), "#{my_klass_name}_id", self.send("id"))
end
end
end