:orders => {
"3" => "1",
"5" => "2",
}
Translate params hash to a List of Pairs.
[
[Order.find(3), true],
[Order.find(5), false]
]
Tento seznam dvojic byl pak zpracováván metodou procsss_orders
.
def process_orders(list_of_pairs)
list_of_pairs.each do |order, expedite|
# handle an order
end
end
Na pořadí prvků ve dvojicích záleží!
class OrdersController
def build_order_list(params)
[order, flag]
end
end
class Orders
def process_orders(pairs)
pairs.each do |order, flag| … end
end
end
Jiný příklad. Jednoduchá forma Connascence.
Customers.find(["last_name = ?", "Weirich"], "age")
def find(conditions, ordered_by)
…
end
A složitější forma Connascence.
Customers.find(["last_name = ?", "Weirich"], "age", 12, 24, ['first_name', 'last_name'])
def find(condition, order_by, limit, offset, slected)
…
end
Takovou složitou formu CoP je lépe převést na CoN
Customers.find(
:conditions => ["last_name = ?", "Weirich"],
:order_by => "age",
:limit = > 12,
:offset => 24,
:select => ['first_name', 'last_name'])
def find(options={})
…
end
Connascence of Position při testování. Následující příklad při testování vybírá prvníhoo uživatele z databáze.
def test_user_can_do_somethin_interesting
user = User.find(:first)
…
end
Na různých počítačích/databázích, u různých vývojářů může být tímto prvním uživatelem jiný člověk. Případně pokud nění stanoveno nějaké pořadí, může databázový stroj pokaždé vrátit jiného uživatele. To pak vede k chybám které se projevují podle toho na kterém počítači/databázi byl test spuštěn. Tomuto případu se vyhneme, když zadáme konktrétního uživatele z databáze.
def test_user_can_do_somethin_interesting
user = User.find(:first)
user = User.find(:first)
user = User.find(:first)
user = User.find_by_name("Jim")
…
end