2

У меня возникли проблемы с Rails и вложенными атрибутами, и мне очень понравилась бы помощь.Обновление Rails 4 Вложенные атрибуты

Вот выход из моей консоли сессии, где я пытался получить обновленные значения для сохранения, но как вы можете видеть, что они, кажется, не принимают на следующей строке, когда я выполнить поиск снова:

irb(main):070:0* e = Equipment.find(26) 
    Equipment Load (0.5ms) SELECT "equipment".* FROM "equipment" WHERE "equipment"."id" = $1 LIMIT 1 [["id", 26]] 
=> #<Equipment id: 26, name: "fdsfsdsdfsd2", created_at: "2015-11-02 15:26:43", updated_at: "2015-11-02 16:38:55", site_id: 57, type_id: 3> 
irb(main):071:0> e.update({"name"=>"fdsfsdsdfsd2", "site_id"=>"57", "type_id"=>"3", "equipment_properties_attributes"=>{"0"=>{"id"=>"15", "value"=>"2015-10-34", "property_id"=>"4"}, "1"=>{"id"=>"16", "value"=>"fsdfdsfsd", "property_id"=>"5"}}}) 
    (0.6ms) BEGIN 
    EquipmentProperty Load (0.7ms) SELECT "equipment_properties".* FROM "equipment_properties" WHERE "equipment_properties"."equipment_id" = $1 AND "equipment_properties"."id" IN (15, 16) [["equipment_id", 26]] 
    (0.2ms) COMMIT 
=> true 
irb(main):072:0> e.equipment_properties 
    EquipmentProperty Load (0.5ms) SELECT "equipment_properties".* FROM "equipment_properties" WHERE "equipment_properties"."equipment_id" = $1 [["equipment_id", 26]] 
=> #<ActiveRecord::Associations::CollectionProxy [#<EquipmentProperty id: 15, equipment_id: 26, property_id: 4, value: "2015-10-34", created_at: "2015-11-02 15:26:51", updated_at: "2015-11-02 15:26:51">, #<EquipmentProperty id: 16, equipment_id: 26, property_id: 5, value: "fsdfdsfsd", created_at: "2015-11-02 15:26:51", updated_at: "2015-11-02 15:26:51">]> 
irb(main):073:0> e = Equipment.find(26) 
    Equipment Load (0.5ms) SELECT "equipment".* FROM "equipment" WHERE "equipment"."id" = $1 LIMIT 1 [["id", 26]] 
=> #<Equipment id: 26, name: "fdsfsdsdfsd2", created_at: "2015-11-02 15:26:43", updated_at: "2015-11-02 16:38:55", site_id: 57, type_id: 3> 
irb(main):074:0> e.equipment_properties 
    EquipmentProperty Load (0.6ms) SELECT "equipment_properties".* FROM "equipment_properties" WHERE "equipment_properties"."equipment_id" = $1 [["equipment_id", 26]] 
=> #<ActiveRecord::Associations::CollectionProxy [#<EquipmentProperty id: 15, equipment_id: 26, property_id: 4, value: "2015-10-30", created_at: "2015-11-02 15:26:51", updated_at: "2015-11-02 15:26:51">, #<EquipmentProperty id: 16, equipment_id: 26, property_id: 5, value: "fsdfdsfsd", created_at: "2015-11-02 15:26:51", updated_at: "2015-11-02 15:26:51">]> 

То же самое происходит с веб-интерфейсом. Я могу предоставить дополнительную информацию, если кто-то нуждается в них, но я разрешаю параметры до и после создания, начальные значения сохраняются.

Я все время бил головой об этом, и я подозреваю, что это что-то глупое, но я просто не уверен, что попробовать дальше. Благодаря!

UPDATE 1: оборудование Модель:

class Equipment < ActiveRecord::Base 
    belongs_to :site 
    belongs_to :type 
    has_and_belongs_to_many :properties 
    has_many :equipment_properties 

    accepts_nested_attributes_for :equipment_properties, reject_if: :all_blank, allow_destroy: true 
end 

А также equipment_properties модель:

class EquipmentProperty < ActiveRecord::Base 
    belongs_to :equipment 
    belongs_to :property 
    has_one :type, through: :equipment 

end 

Кроме того, отношение может быть, что я могу обновить отдельные equipment_property без вложенности и что делает работу ,

UPDATE 2:

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

equipment_params[:equipment_properties_attributes].each do |property| 
     ep = EquipmentProperty.where(id: property[1][:id]).first 
     #logger.debug "EP Value: #{ep.value}" 
     #logger.debug "Property Value: #{property[1][:value]}" 
     ep.value = property[1][:value] 
     ep.save 
    end 
+0

Как выглядит соответствующая часть вашей модели 'Equipment'? У вас есть 'accepts_nested_attributes_for: equipment_properties'? – lurker

+0

Это правильный вопрос. У меня его есть: accepts_nested_attributes_for: equipment_properties, reject_if:: all_blank, allow_destroy: true –

+0

Добавлены ли они в требуемые параметры для сильных параметров в вашем контроллере? params.require (: equipment) .permit (: yer_attributes, yer_nested_attributes: [: id,: name,: etc]) – Doctor06

ответ

0

Это то, что я в итоге добавил к контроллеру, чтобы решить эту проблему. Определенно, взлом, хотя и я не уверен, почему принимаются обновления:

equipment_params[:equipment_properties_attributes].each do |property| 
     ep = EquipmentProperty.where(id: property[1][:id]).first 
     #logger.debug "EP Value: #{ep.value}" 
     #logger.debug "Property Value: #{property[1][:value]}" 
     ep.value = property[1][:value] 
     ep.save 
end