adds images to anwers

This commit is contained in:
rgarcia
2017-10-04 21:42:57 +02:00
parent 24fc7ab70a
commit 1cf9bc4ad1
10 changed files with 166 additions and 3 deletions

View File

@@ -0,0 +1,33 @@
class Admin::Poll::Questions::Answers::ImagesController < Admin::Poll::BaseController
before_action :load_answer
def index
end
def new
@answer = ::Poll::Question::Answer.find(params[:answer_id])
end
def create
@answer = ::Poll::Question::Answer.find(params[:answer_id])
@answer.attributes = images_params
if @answer.save
redirect_to admin_answer_images_path(@answer),
notice: "Image uploaded successfully"
else
render :new
end
end
private
def images_params
params.require(:poll_question_answer)
.permit(images_attributes: [:id, :title, :attachment, :cached_attachment, :user_id, :_destroy])
end
def load_answer
@answer = ::Poll::Question::Answer.find(params[:answer_id])
end
end

View File

@@ -0,0 +1,12 @@
module Galleryable
extend ActiveSupport::Concern
included do
has_many :images, as: :imageable, dependent: :destroy
accepts_nested_attributes_for :images, allow_destroy: true, update_only: true
def image_url(style)
image.attachment.url(style) if image && image.attachment.exists?
end
end
end

View File

@@ -19,8 +19,9 @@ class DirectUpload
if @resource_type.present? && @resource_relation.present? && (@attachment.present? || @cached_attachment.present?) if @resource_type.present? && @resource_relation.present? && (@attachment.present? || @cached_attachment.present?)
@resource = @resource_type.constantize.find_or_initialize_by(id: @resource_id) @resource = @resource_type.constantize.find_or_initialize_by(id: @resource_id)
if @resource.class.reflections[@resource_relation].macro == :has_one if true #@resource.class.reflections[@resource_relation].macro == :has_one
@relation = @resource.send("build_#{resource_relation}", relation_attributtes) #@relation = @resource.send("build_#{resource_relation}", relation_attributtes)
@relation = @resource.images.send("build", relation_attributtes)
else else
@relation = @resource.send(@resource_relation).build(relation_attributtes) @relation = @resource.send(@resource_relation).build(relation_attributtes)
end end

View File

@@ -1,4 +1,6 @@
class Poll::Question::Answer < ActiveRecord::Base class Poll::Question::Answer < ActiveRecord::Base
include Galleryable
belongs_to :question, class_name: 'Poll::Question', foreign_key: 'question_id' belongs_to :question, class_name: 'Poll::Question', foreign_key: 'question_id'
validates :title, presence: true validates :title, presence: true

View File

@@ -0,0 +1,9 @@
<%= back_link_to admin_question_path(@answer.question) %>
<% @answer.images.each do |image| %>
<%= render_image(image, :large, true) if image.present? %>
<% end %>
<div>
<%= link_to "Add image", new_admin_answer_image_path(@answer) %>
</div>

View File

@@ -0,0 +1,66 @@
<%= form_for(Poll::Question::Answer.new,
url: admin_answer_images_path(@answer),
method: :post) do |f| %>
<div class="images small-12 column">
<%# render 'images/nested_image', imageable: @answer, f: f %>
<%= f.label :images, t("images.form.title") %>
</div>
<p class="help-text"><%# imageables_note(imageable) %></p>
<div id="nested-image">
<%= f.fields_for :images do |image_builder| %>
<%# render 'images/image_fields', f: image_builder, imageable: imageable %>
<div id="<%= dom_id(f.object) %>" class="image direct-upload nested-fields">
<%= f.hidden_field :id %>
<%= f.hidden_field :user_id, value: current_user.id %>
<%= f.hidden_field :cached_attachment %>
<div class="small-12 column title">
<%= f.text_field :title, placeholder: t("images.form.title_placeholder") %>
</div>
<%= render_image(f.object, :thumb, false) if f.object.attachment.exists? %>
<div class="small-12 column attachment-actions">
<div class="small-9 column action-add attachment-errors image-attachment">
<%= render_image_attachment(f, @answer, f.object) %>
</div>
<div class="small-3 column action-remove text-right">
<%= render_destroy_image_link(f, f.object) %>
</div>
</div>
<div class="small-6 column">
<p class="file-name">
<%= image_attachment_file_name(f.object) %>
</p>
</div>
<div class="small-12 column">
<div class="progress-bar-placeholder"><div class="loading-bar"></div></div>
</div>
<hr>
</div>
<% end %>
</div>
<%= link_to_add_association t('images.form.add_new_image'), f, :images,
force_non_association_create: true,
partial: "images/image_fields",
id: "new_image_link",
class: "button hollow #{"hide" if @answer.images.present?}",
render_options: {
locals: { imageable: @answer }
},
data: {
association_insertion_node: "#nested-image",
association_insertion_method: "append"
} %>
</div>
<%= f.submit "Save image" %>
<% end %>

View File

@@ -39,12 +39,17 @@
<tr> <tr>
<th scope="col"><%= t("admin.questions.show.answers.title") %></th> <th scope="col"><%= t("admin.questions.show.answers.title") %></th>
<th scope="col"><%= t("admin.questions.show.answers.description") %></th> <th scope="col"><%= t("admin.questions.show.answers.description") %></th>
<th scope="col">Imágenes</th>
</tr> </tr>
<% @question.question_answers.each do |answer| %> <% @question.question_answers.each do |answer| %>
<tr id="<%= dom_id(answer) %>" class="poll_question_answer"> <tr id="<%= dom_id(answer) %>" class="poll_question_answer">
<th scope="col"><%= answer.title %></th> <th scope="col"><%= answer.title %></th>
<th scope="col"><%= answer.description %></th> <th scope="col"><%= answer.description %></th>
<th scope="col">
<%= link_to "Lista de imágenes",
admin_answer_images_path(answer) %>
</th>
</tr> </tr>
<% end %> <% end %>
</table> </table>

View File

@@ -301,7 +301,10 @@ Rails.application.routes.draw do
end end
resources :questions do resources :questions do
resources :answers, only: [:new, :create], controller: 'questions/answers' resources :answers, only: [:new, :create], controller: 'questions/answers', shallow: true do
resources :images, controller: 'questions/answers/images'
end
end end
end end

View File

@@ -0,0 +1,31 @@
require 'rails_helper'
feature 'Images' do
background do
admin = create(:administrator)
login_as(admin.user)
end
scenario "Index" do
end
scenario "Create", :js do
question = create(:poll_question)
answer = create(:poll_question_answer, question: question)
visit admin_question_path(question)
within("#poll_question_answer_#{answer.id}") do
click_link "Lista de imágenes"
end
click_link "Add image"
imageable_attach_new_file(:poll_question_answer, "spec/fixtures/files/clippy.jpg")
click_button "Save image"
expect(page).to have_content "Image uploaded successfully"
end
end

View File

@@ -214,6 +214,7 @@ end
def imageable_attach_new_file(imageable_factory_name, path, success = true) def imageable_attach_new_file(imageable_factory_name, path, success = true)
click_link "Add image" click_link "Add image"
within "#nested-image" do within "#nested-image" do
image = find(".image") image = find(".image")
image_input = image.find("input[type=file]", visible: false) image_input = image.find("input[type=file]", visible: false)