2015-05-18 6 views
1

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

Вот мои модели:

class Device < ActiveRecord::Base 
    belongs_to :hub 
    has_many :accessories, dependent: :destroy 
    accepts_nested_attributes_for :accessories, 
         reject_if: proc { |attributes| attributes['material'].blank? }, 
        allow_destroy: true 
end       

class Accessory < ActiveRecord::Base 
    belongs_to :device 
end 

Здесь вы контроллер. У меня есть модель устройства, вложенная под модель пользователя и концентратора.

class DevicesController < ApplicationController 
    def edit 
    @user = User.find_by(params[:user_id]) 
    @hub = Hub.find_by_title(params[:hub_id]) 
    @device = Device.find_by(id: params[:id]) 

    end 

    def update 
    @user = User.find_by(params[:user_id]) 
    @hub = Hub.find_by_title(params[:hub_id]) 
    @device = Device.find_by(id: params[:id]) 

    if @device.update_attributes(device_params) 
     flash[:success] = "update successfully" 
     redirect_to user_hub_device_path(@user, @hub, @device) 
    else 
     render 'edit' 
    end 
    end 
    private 

    def device_params 
    params.require(:device).permit(:model, :hub_id, :resolution, :materials, :startcost, :take_online, :delivery_time, :unitcost, :color, :accessories, :accessories_attributes => [:id, :name, :cost, :color, :device_id, :_destroy]) 
    end 

end 

И наконец, моя форма.

<%= form_for([@user, @hub, @device]) do |f| %> 
<fieldset> 
    <div id="material"> 

     <%= f.fields_for :accessories do |a| %> 
     <%= render 'devices/accessory', a: a %> 
     <% end %> 

    </div> 
</fieldset> 

Парциальный:

<div class="row"> 
    <%= a.collection_select :name, Material.all, :material, :material %> 
    <%= a.text_field :cost, id: "right-label" %> 
    <%= a.text_field :color, id: "right-label" %> 
    <%= a.check_box :_destroy %> 

</div> 
+0

Вы создали экземпляры (используя метод сборки) аксессуаров, чтобы вы могли редактировать его в форме? –

+0

Да, у меня есть несколько экземпляров, и они появляются для редактирования, но они остаются неизменными после отправки. – znz1990

+0

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

ответ

0

Вы params[:device][:materials] белые список, но вы проверяете attributes['material'].blank? (обратите внимание на эль на конце). Это приводит к отклонению вложенных атрибутов.

+0

Спасибо, брат. Вы напоминаете мне об этой части. Фактически, это не было существенным, что вызвало отказ. Я меняю его на атрибут аксессуара, и он работает сейчас. – znz1990

Смежные вопросы