2016-07-15 6 views
0

Friendly_IDの背後にあるアイデアは、スラッグやIDを使ってレコードを取得できるということです。 したがって、User.friendly.find(id)は、slugまたはidのいずれかを使用してレコードを取得します。レコードが見つからない場合は、エラーが発生します。 レコードを見つけたいが、レコードが見つからない場合はnilを返す。 は今のところ、私が知っている唯一の方法は、このようなものです:どのようにUser.find_by_id(id)を使用する必要はありませんか? User.find_by_slug(id)

u = User.find_by_id() || User.find_by_slug() 

これは古いナメクジを検索しませんプラスそれは不格好です。よりクリーンなソリューションはありますか?

答えて

0

最適ではありませんが、whereメソッド呼び出しでraw sqlを使用できます。試してみてください:

u = User.where("id ='...' or slug ='...') 

あなたがARELを使用することができ、生のSQLを回避したい場合:

users = Arel::Table.new(:users) 
u = users.where(users[:id].eq(...).or(users[:slug].eq('...'))) 
0

あなたが値としてnilを持つようにしたい場合は、レコードが見つからない場合、あなたはrescuenilを割り当てることができます。以下のようなブロック:レコードが見つからない場合findドキュメントのよう

begin 
    u = User.friendly.find(id) 
rescue ActiveRecord::RecordNotFound 
    u = nil 
end 

を、それがActiveRecord::RecordNotFoundを発生させます。

しかし、あなたは例外処理を使用しない場合、その後、あなたが不格好なソリューションを使用する必要がある場合があります

u = User.find_by "id = ? or slug = ?", <ID>, <SLUG> 
関連する問題