acceptpts_nested_attributes_for жесткий код в контроллере

Я пишу код для API. Где я назначаю параметры для полей класса.

У меня есть отношения, event_file.rb

 has_many :event_file_attachments
 accepts_nested_attributes_for :event_file_attachments

event_file_attachment.rb

mount_uploader :attachment, EventFileUploader
belongs_to :event_file

Хотел взять значение из JOSN и записать во вложенный атрибут,

JOSN,

{"event_files"=>{"event_id"=>"1"}, "attachment"=>#<ActionDispatch::Http::UploadedFile:0xc16e4e4 @tempfile=#<Tempfile:/tmp/RackMultipart20141226-5521-12zezuk>, @original_filename="asset.JPG", @content_type="image/jpg", @headers="Content-Disposition: form-data; name=\"attachment\"; filename=\"asset.JPG\"\r\nContent-Type: image/jpg\r\n">}

В контроллере,

data = params[:event_files]


      @event_file = EventFile.new(:event_member_ids => data['event_member_ids'],
                        :user_id => current_user.id,
                        :company_id => @current_company.id,
                        :event_id => data['event_id'],
                        :status => 0)
      @event_file.save

      @event_file_attachment = EventFileAttachment.new(:event_file_id => @event_file.id,
                                                       :status => 0,
                                                       :attachment => params[:attachment])
      @event_file_attachment.save

И это неправильный способ сохранить вложенный атрибут, Как изменить и оптимизировать код....

1 ответ

Решение

Ассоциация, которую вы создали вместе с accepts_nested_attribute_for метод создаст event_file_attachments_attributes на котором вы можете добавить соответствующие атрибуты вложения файла событий, вот краткий пример:

В контроллере:

@event_file = EventFile.new(:event_member_ids => data['event_member_ids'],
                    :user_id => current_user.id,
                    :company_id => @current_company.id,
                    :event_id => data['event_id'],
                    :status => 0,
                    :event_file_attachments_attributes => [{"0" => {:attr1 => "value", :attr2 => "value"}},{"1" => {:attr1 => "value", :attr2 => "value"}}])

Для получения более подробной информации об этом вы можете проверить действительно полезные Railscast http://railscasts.com/episodes/196-nested-model-form-part-1

Другие вопросы по тегам