現在、モデルの URL スラッグを動的に生成しています (そして、それらを解釈するために to_param/self.from_param を実装しています)。私のスラッグ生成コードは冗長に感じ、リファクタリングを使用できます。
これをどのようにリファクタリングすれば、まだ読みやすくなりますが、冗長性が減り、おそらくより明確になりますか?
関係
ユーザーhas_many :lists
所有者のリストの所属先:所有者
コード
def generate_slug
if self.owner
slug_found = false
count = 0
temp_slug = to_slug
until slug_found
# increment the count
count += 1
# create a potential slug
temp_slug = if count > 1
suffix = "_" + count.to_s
to_slug + suffix
else
to_slug
end
# fetch an existing slug for this list's owner's lists
# (i.e. owner has many lists and list slugs should be unique per owner)
existing = self.owner.lists.from_param(temp_slug)
# if it doesn't exist, or it exists but is the current list, slug found!
if existing.nil? or (existing == self)
slug_found = true
end
end
# set the slug
self.slug = temp_slug
else
Rails.logger.debug "List (id: #{self.id}, slug: #{self.slug}) doesn't have an owner set!"
end
end