Это вопрос из двух частей. Часть 1 спрашивает, правильна ли моя структура (она работает, я просто хочу знать, является ли это подходом Rails). Часть 2 спрашивает, как на самом деле выполнить вопрос в заголовке этого поста, здесь мы идем:
У меня есть следующая структура в моей модели DVD:
def self.remove_parens
# we will remove the beginning parentheses from the entries sent to us by the parens method
@dvds = self.parens # get the entries we need to edit
@dvds.each do |dvd|
@newDvds = dvd.title.gsub!(/^\([0-9]*\)/, '')
end
end
В файле DvdsController:
def fixer
@newDvds = Dvd.remove_parens
end
В фиксере Просмотр файла:
<%
@newDvds.each do |dvd|
fullText = "#{dvd.title}"
%>
Это прекрасно работает, я вижу результат работы gsub и удаление записей вроде (245) из заголовка.
- Это правильный способ делать вещи в Rails? Поместить большую часть кода в модель, а затем заставить контроллер просто вызвать эту функцию?
- Я понимаю, что это только распечатывает изменения, а не записывает их обратно в базу данных. Я хочу записать их обратно в базу данных, как бы я это сделал? Может быть, вызвав действие update для @newDvds в контроллере (поскольку модель не знает о методе обновления)?
Socjopata: Я исправил свою модель, основываясь на ваших предложениях:
dvds = self.parens # get the entries we need to edit
dvds.each do |dvd|
fixedTitle = dvd.title.gsub!(/^\([0-9]*\)/, '') # this prints it out but doesn't change the entries in the table
dvd.update_attribute(:title, fixedTitle) # this is supposed to update the attribute in the table
end
Но данные не обновляются, данные в таблице все те же.
Что я наконец-то сделал, так это то, что, похоже, помогло:
Dvd.update(dvd.dogTag, { :title => fixedTitle } )
Теперь мне нужно обрезать этот заголовок, так что я решил добавить что-то вроде:
fixedTitle = dvd.title.gsub!(/^\([0-9]*\)/, '').strip!