Ruby on Rails: установить данные в моей модели на основе другого поля - PullRequest
2 голосов
/ 12 августа 2010

У меня есть модель item, которая имеет name и price (int).Как я могу сделать так, чтобы, когда пользователь выбирает name из выпадающего списка, цена автоматически добавлялась в БД?

Мой name заполняется хешем этого формата:THINGS = { 'Item 1' => 'item1', 'Item 2' => 'item2', etc } Я думаю, что это большой оператор switch, где я делаю что-то вроде

case s
    when hammer
        item.price = 15
    when nails
        item.price = 5
    when screwdriver
        item.price = 7
end

Но я не уверен, куда бы я поместил этот переключатель.

Спасибо

1 Ответ

2 голосов
/ 12 августа 2010

Вам нужно нажать его в обратном вызове before_save.

Внутри этого обратного вызова вы проверяете имя, выбранное вашим пользователем, и обновляете цену

class Item

  before_save :update_price

  def update_price
    self.price = Product.find_by_name(self.name).price
  end
end

Вы можете сделать это и в before_validation, если выхочу подтвердить, что ваша цена действительно определена в вашей модели

class Item

  before_validation :update_price
  validates_presence_of :price

  def update_price
    self.price = Product.find_by_name(self.name).price
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...