Rails の理解を深めるために、data_mapper を使用する Sinatra アプリを変換しています。
データベースを検索し、検索されたレコードの最初のインスタンスを返すデータマッパーの「最初の」メソッドの最良の代替品を見つけようとしています。
これが正しく行われたかどうか、またはより良い解決策があるかどうか、誰でもコメントできますか?
シチュエーション #1 シナトラ
url = Url.first(:original => original)
Rails (どちらでもOK?)
url = Url.find_by_original(original) #this find_by_original
url = Url.where(:first_name => 'original')
状況#2
シナトラ
raise 'Someone has already taken this custom URL, sorry' unless Link.first(:identifier => custom).nil?
私のレール (検索あり)
raise 'Someone has already taken this custom URL, sorry' unless Link.find(:identifier => custom).nil? #this Link.find
元のコンテキストは URL を短縮するメソッドでした
def self.shorten(original, custom=nil)
url = Url.first(:original => original)
return url.link if url
link = nil
if custom
raise 'Someone has already taken this custom URL, sorry' unless Link.first(:identifier => custom).nil?
raise 'This custom URL is not allowed because of profanity' if DIRTY_WORDS.include? custom
transaction do |txn|
link = Link.new(:identifier => custom)
link.url = Url.create(:original => original)
link.save
end
else
transaction do |txn|
link = create_link(original)
end
end
return link
end