Взлом Active Record, как мне использовать метод атрибутов? - PullRequest
1 голос
/ 30 января 2010

Метод атрибутов возвращает хэш всех атрибутов с их именами в качестве ключей и значениями атрибутов в качестве значений;Я хочу использовать этот метод, создавая новую производную метода update_attributes (attribute), назовем его jz_attributes (attribute).

Update_attributes делает это:

def update_attributes(attributes)
   self.attributes = attributes
       save
   end

И jz_attributes (атрибуты)) сделает что-то немного другое:

def jz_attributes(attributes)
    debugger
    self.attributes = attributes
       #does something else
end

Я хочу полностью использовать метод ActiveRecords атрибуты , но у меня возникли проблемы:

def attributes
         self.attribute_names.inject({}) do |attrs, name|
           attrs[name] = read_attribute(name)
           attrs
        end
end

Воткакой терминал говорит:

   28   end
   29  end
   30  
   31  def jz_attributes(attributes)
   32   debugger
=> 33   self.attributes = attributes
   34  end
   35  
   36  
   37   #inventory_to_increment.quantity = quantity.to_i
(rdb:1) p attributes
nil
(rdb:1) next
/Users/justinz/.gem/ruby/1.8/gems/actionpack-2.3.5/lib/action_controller/rescue.rb:162
rescue_action(exception)

Мой контроллер, использующий атрибуты jz_attributes:

def cart2_update
        @cart = find_cart
        @cart.jz_attributes(params[:cart_item])
end

Видите ли вы что-нибудь очевидное, что я делаю неправильно? Спасибо !

1 Ответ

0 голосов
/ 30 января 2010

Недавно я сделал несколько очень похожих вещей при построении системы форм заказов. Система заказов должна была постоянно обновлять форму с изменениями, но я не хотел сохранять ее в базе данных, пока пользователь не подтвердит все. (Например, налоги и т. Д.).

Я думаю, что вы на правильном пути, но из того, что вы здесь вставили, похоже, что вы пытаетесь установить nil для атрибутов? Может быть, вы можете опубликовать, что параметры для запроса в целом?

Если вы делаете что-то подобное, почему бы просто не передать атрибуты =? Это не сохранит модель, только update_attributes = должен сохранить ее на этом этапе. Если вам нужно сделать что-то еще, связанное с атрибутами = то, что вы хотите выполнить с помощью jz_attributes, может быть, вы можете манипулировать параметрами, прежде чем они туда попадут, или выполнить эту цель другими способами?

def cart2_update
        @cart = find_cart
        @cart.attributes=(params[:cart_item])
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...