Лучший способ построить ассоциацию has_one или обновить, если она существует - PullRequest
7 голосов
/ 01 февраля 2012

Мой класс скидок имеет период продаж.Я хочу написать метод, который может построить эту ассоциацию, когда она не существует, или обновить ее, когда она существует.В настоящее время я пишу следующее условие if.

class Discount < ActiveRecord::Base
  has_one :sales_period

  def fetch_period
    end_date = ...
    if sales_period.nil?
      build_sales_period( end: end_date )
    else
      sales_period.end = end_date
    end
  end
end

Есть ли лучший способ сделать это, похожий на find_or_create?

Ответы [ 2 ]

12 голосов
/ 01 февраля 2012

Не совсем то, что вы ищете, но вы можете немного его укоротить.

def fetch_period
  end_date = ...
  period = sales_period || build_sales_period
  period.end = end_date
end
0 голосов
/ 01 февраля 2012

find_or_initialize аналогично first_or_initialize . Пример:

def fetch_period
  end_date = ...
  sales_period.find_or_initialize_by_end(end_date)
end

Кроме того, я бы переименовал end, это ключевое слово ruby. Вы, вероятно, получите странную ошибку, когда кто-то попытается eval код или что-то подобное, и это будет очень запутанно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...