- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
def set_path
if name && (!path || path == "/")
self.path = self.parent.present? ? "#{self.parent.path}/#{name}" : "/#{name}"
elsif !new_record? && name && path && name_was != name
parts = path.split("/")
parts.pop
self.path = [parts.join("/"), name].join("/")
elsif !new_record? && name && self.parent_id_changed?
self.path = self.parent.present? ? "#{self.parent.path}/#{name}" : "/#{name}"
elsif new_record? && name && path
self.path = [path, name].join("/")
end
if path && self.parent.blank?
parts = path.split("/")
self.name = parts.pop
parent_path = parts.join("/")
if parent_path.blank? || parent_path == "/"
self.parent = nil
else
possible_parent = site.asset_folders.find_by_path(parent_path)
self.parent = possible_parent.present? ? possible_parent : self.class.create(path: parent_path, site: site)
end
end
true
end
Как не нужно работать с путями в Rails-приложении. Это и еще примерно 500 строк было заменено на 11 строк кода, включая пустые.
Dummy00001 20.05.2013 15:59 # 0
кто писал?
Lure Of Chaos 20.05.2013 21:50 # 0
пхпшник?
whitequark 20.05.2013 21:53 # +4
guest8 24.08.2020 19:01 # −999
gost 24.08.2020 19:02 # 0
guest8 24.08.2020 19:03 # −999
guest8 24.08.2020 19:03 # −999
6a6yuH 24.08.2020 18:54 # 0
serpinski 20.05.2013 22:27 # −4
whitequark 20.05.2013 22:30 # 0
Там была очень, очень плохая эмуляция древовидной файловой системы на Ruby — вся работа с путями выглядела вот так и работала иногда — плюс раздача статики, где каждый хит проходил через базу данных, которую я заменил на одну функцию, собирающую дерево из симлинков, и nginx.
Из не попавшего в фрагмент: например, сломанная эмуляция транзакций при помощи поля в базе и исключений. При том, что можно было просто взять и написать транзакцию *facepalm
serpinski 20.05.2013 22:40 # −3
whitequark 21.05.2013 00:07 # 0
Lowezar 21.05.2013 10:41 # +5
Я это к чему - там тоже 1000-строковые модели легко (если поймёшь что они делать должны:)) сокращаются до 30-50 строк включая добавление DOC-комментов.
whitequark 21.05.2013 12:13 # 0
Lowezar 22.05.2013 21:10 # +1
roman-kashitsyn 22.05.2013 22:15 # +2
j123123 27.09.2021 21:46 # 0
Эксперт по разработке хеш-таблиц
guest6 27.09.2021 21:48 # 0
j123123 27.09.2021 21:18 # 0
CBuHOKYP 27.09.2021 22:05 # 0