1
В моем приложении пользователь может импортировать места из файла XLSX:Rails5/как установить значение атрибута по умолчанию для импортируемых объектов
контроллер мест:
def import
Place.import(params[:file])
respond_to do |format|
format.html { redirect_to admin_places_url, notice: 'Places were successfully imported.' }
format.json { head :no_content }
end
end
Согласно моей модели - каждый место belongs_to: состояние и
validates :status,
presence: true,
uniqueness: false,
inclusion: {in: Status.all}
Я хочу установить статус по умолчанию (status_id) для импортированных мест - если у них их нет.
after_initialize :set_default_values, unless: :persisted?
и
def set_default_values
self.status_id = 2 if # ???
end
Мой вопрос: как определить метод set_default_values?
Обновление:
Мое решение, которое работает:
def self.import(file)
spreadsheet = open_spreadsheet(file)
puts spreadsheet.inspect
header = spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row = Hash[[header, spreadsheet.row(i)].transpose]
place = find_by_id(row["id"]) || new
row["status_id"] = DEFAULT_STATUS if row["status_id"]==nil # NEW
place.attributes = row.to_hash #works for xlsx doesn't work for csv - unknown attributes for Place.
place.save!
end
end
def set_default_values
self.status_id = DEFAULT_STATUS if self.status_id.nil?
end
хммм я не думаю, что мне нравится это решение ... любые другие идеи? – MaciekR
@MaciekR Это то же самое решение, о котором вы говорили, вам просто нужно self.status_id = DEFAULT_STATUS, если self.status_id.nil? (и, конечно, константа DEFAULT_STATUS). –
Не работает (отсутствует статус status_id) - в моей модели. Что я сделал (он работает, но я не уверен, что это лучшее решение): я добавил строку ["status_id"] = DEFAULT_STATUS, если строка ["status_id"] == nil в моем self.import (файле) метод – MaciekR