Загрузить данные Excel, используя комбинацию из двух столбцов? - PullRequest
1 голос
/ 27 октября 2019

У меня есть лист Excel, который имеет следующий формат: enter image description here

Члены могут иметь несколько записей в соответствующей таблице members. При загрузке данных из шаблона Excel, я хотел бы find_by pin, а также end_date, чтобы я обновлял конкретную запись во время загрузки.

Я использую gem roo для импорта данных Excelи вот мой load_imported_members метод:

def load_imported_members
    spreadsheet = open_spreadsheet
    spreadsheet.default_sheet = 'Worksheet'
    header = spreadsheet.row(1)
    (2..spreadsheet.last_row).map do |i|
      row = Hash[[header, spreadsheet.row(i)].transpose]
      member = Member.find_by_pin(row["pin"]) || Member.new
      member.attributes = row.to_hash.slice("id", "name", "pin", "end_date", "email")
      member
    end
  end

Я считаю, что если я использую и pin, и end_date в методе find_by, я обновлю конкретную запись, так как можетбыть две записи в таблице, но один должен иметь end_date. Как мне этого добиться? Спасибо

1 Ответ

1 голос
/ 27 октября 2019

Если вы хотите найти только одну запись за раз, вы можете использовать find_by() с хешем для поиска по нескольким столбцам, например:

Member.find_by(pin:row["pin"],end_date: row["end_date"])

find_byподробнее здесь

Если вы хотите получить несколько записей, соответствующих вашему поиску, вам нужна функция where() в классе Member вместо find_by()

where объясняется подробнее здесь

...