Настройки поля update_attributes - PullRequest
5 голосов
/ 10 марта 2011

Итак, у меня есть страница редактирования, на которой загружены редактируемые поля ... простое обновление ... @patient.update_attributes(params[:patient]) ... все отлично, кроме ....

Iу меня есть одно поле из этих 20, которое мне нужно немного подправить, прежде чем оно будет готово к БД, и, кажется, мне нужно либо

  1. две поездки
    @patient.update_attributes(params[:patient])
    @patient.update_attribute( :field=>'blah')

  2. или установить их все по отдельности
    patient.update_attributes(:field1=>'asdf', :field2=>'sdfg',:field3=>'dfgh', etc...)

Я не могу найти способ сделать этоэто один налет?

Ответы [ 2 ]

4 голосов
/ 10 марта 2011

Какой атрибут нужно настроить?Есть два способа сделать это:

Либо массируйте параметры, прежде чем отправлять их в метод update_attribute:

Я просто привожу здесь пример, если вы хотите подчеркнуть одно из значений:

params[:patient][:my_tweak_attribute].gsub!(" ", "_")
@patient.update_attributes(params[:patient])

Тогда есть предпочтительный способ настройки в обратном вызове before_save или before_update в вашей модели:

class Patient < ActiveRecord::Base
  before_update :fix_my_tweak_attribute, :if => :my_tweak_attribute_changed?

  protected
    def fix_my_tweak_attribute
      self.my_tweak_attribute.gsub!(" ", "_")
    end
end

Это сохраняет ваш контроллер чистым от кода, который он, вероятно, не делаетдействительно нужно.

Если вам просто нужно добавить новый параметр, который не был отправлен формой, вы можете сделать это в контроллере следующим образом:

params[:patient][:updated_by_id] = current_user.id
@patient.update_attributes(params[:patient])

Предполагая current_userгде-то определен для вас (опять же, просто пример)

2 голосов
/ 10 марта 2011

Вы можете создать виртуальный атрибут для этого поля.Скажите, что поле: имя.Вы создаете функцию в своей модели Patient, например:

def name
  self[:name] = self[:name] * 2
end

И, конечно, вы делаете свои вещи внутри этой функции :) Не заботясь о себе [: name], вы также можете использовать read_attribute (: name).

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