Проблемы при загрузке изображения через скрепку в альтернативной модели
Состав
У меня есть таблица изображений, к которой многие другие таблицы имеют внешние ключи. Мой стол TeamMember имеет image_id
ссылка на таблицу изображений.
Образ
class Image < ActiveRecord::Base
belongs_to :user
has_attached_file :asset
validates :user_id, presence: true
end
Участник команды
class TeamMember < ActiveRecord::Base
belongs_to :project
belongs_to :user
has_one :image, as: :attachable
accepts_nested_attributes_for :image
validates :project_id, presence: true
validates :user_id, presence: true
validates :image_id, presence: true
validates :name, presence: true, length: { maximum:75 }
validates :description, presence: true, length: { maximum: 255 }
after_initialize :init
def init
self.removed = false if self.removed.nil?
end
end
контроллер
def create
@pteam_member = TeamMember.new(team_member_params)
@pteam_member.user_id = get_current_user.id
if @team_member.save
redirect_to action: :show, id: @team_member.id
else
set_project
render action: :new
end
end
def team_member_params
params.require(:team_member).permit(:name, :description, :image, :project_id)
end
Посмотреть
<%= form_for @team_member, url: team_members_path(params[:project_id]), html: { multipart: true } do |f| %>
<div class="form-group">
<%= f.label :name %>
<%= f.text_field :name, { class: "form-control" } %>
</div>
<div class="form-group">
<%= f.label :description %>
<%= f.text_area :description, { class: "form-control", rows: 6 } %>
</div>
<div class="form-group">
<%= f.label :image, 'Photo' %>
<%= f.fields_for :image_attributes do |image_fields| %>
<%= image_fields.file_field :asset %>
<% end %>
</div>
<div class="actions">
<div class="btn-group">
<button type="submit" class="btn btn-success">save <span class="glyphicon glyphicon-floppy-saved"></span></button>
</div>
</div>
<% end %>
проблема
Неважно, что я пытаюсь, я не могу получить :image
сохранить как часть :team_member
, Я получаю ошибку ActiveRecord:: AssociationTypeMismatch:
Ожидается изображение (#70132078464480), получен ActionDispatch::Http::UploadedFile(#70132082679240)
Куда я иду не так? Чего мне не хватает, я подхожу к этому неправильно?
1 ответ
Вам необходимо прикрепить файл к объекту изображения, связанному с team_member. Что вы на самом деле делаете, так это пытаетесь связать файл напрямую с team_member как ассоциацию изображений - что не сработает. Поскольку вы используете nested_attributes, вы можете исправить это, просто изменив формат запроса. Вместо,
<%= f.file_field :image %>
Использовать этот:
<%= f.fields_for :image_attributes do |image_fields| %>
<%= image_fields.file_field :asset %>
<% end %>
И измените свои параметры в белом списке соответственно.