Darek Finster
2012-Oct-07 00:43 UTC
How to refactor complicated logic in create_unique method?
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 -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/0f9XTmZfNt0J. For more options, visit https://groups.google.com/groups/opt_out.
Colin Law
2012-Oct-08 19:28 UTC
Re: How to refactor complicated logic in create_unique method?
On 7 October 2012 01:43, Darek Finster <dariusz.finster-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> 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) > endFor 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> > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To view this discussion on the web visit > https://groups.google.com/d/msg/rubyonrails-talk/-/0f9XTmZfNt0J. > For more options, visit https://groups.google.com/groups/opt_out. > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.