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