I would like to simplify this complicated logic for creating unique
Track
object.
def self.create_unique§
f = Track.find :first, :conditions => [‘user_id = ? AND target_id = ?
AND target_type = ?’, p[:user_id], p[:target_id], p[:target_type]]
x = ((p[:target_type] == ‘User’) and (p[:user_id] == p[:target_id]))
Track.create§ if (!f and !x)
end
I would like to simplify this complicated logic for creating unique Track
object.
def self.create_unique(p)
f = Track.find :first, :conditions => [‘user_id = ? AND target_id = ? AND
target_type = ?’, p[:user_id], p[:target_id], p[:target_type]]
x = ((p[:target_type] == ‘User’) and (p[:user_id] == p[:target_id]))
Track.create(p) if (!f and !x)
end
For a start I would do the x=… first since it does not depend on f.
Then you only need to do the find if x true. Then in the find use
.count and test it for >0 rather then finding a record. Also extract
the find out into one or more scopes.
Are there relationships between user and track? If so then you may be
able to use current_user.tracks rather than testing user_id.
Colin
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.