refile simple_form неопределенный метод вложение_поле

Я пытаюсь подключить refile к своему представлению и получаю следующую ошибку: введите здесь описание изображения

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

class Job < ActiveRecord::Base
  acts_as_paranoid

  acts_as_taggable
  acts_as_taggable_on :languages

  belongs_to :company
  belongs_to :category

  validates :title,
            :location,
            :category,
            :language_list,
            :short_description,
            :description,
            :application_process,
            presence: true
end

class Company < ActiveRecord::Base
  acts_as_paranoid
  has_many :jobs

  attachment :company_logo, type: :image

  validates :name, :url, :email, presence: true
end

И представление simple_form (игнорируйте binding.pry)

= render layout: 'header' do
  = simple_form_for(@job) do |j|
    div[class='panel-heading']
      h3[class='panel-title']
        |Position Details
    div[class='panel-body']
      = j.input :title
      = j.input :location
      = j.association :category, as: :radio_buttons
      = j.input :language_list, as: :check_boxes, collection: @tags
      = j.input :short_description
      = j.input :description, input_html: { class: 'textarea-height wysihtml5' }
      = j.input :application_process
    div[class='panel-heading']
      h3[class='panel-title']
        |Company Details
    div[class='panel-body']
      = j.simple_fields_for :company do |jc|
        = jc.input :name

        = binding.pry

        = jc.input :company_logo, as: :attachment
        = jc.input :url
        = jc.input :email
    div[class='panel-heading panel-heading-info']
      h3[class='panel-title']
        |Would you like your job posting featured?
    div[class='panel-body']
      p
        |Featured posted are promoted with additional design elements to grab the
          job seeker's attention.  This additional marketing capability can be purchased
          for an additonal $#{AppConfig.product['settings']['job_base_featured_price']}.

      = j.input :is_featured

      = j.button :button, type: 'button', class: 'btn-primary' do
        = job_posting_button_step_label
        =>
        i[class='fa fa-arrow-circle-right']

Пока я разбираю документацию, я не могу понять, почему attachment_field не определено.

Кроме того, у меня есть настройка инициализатора refile.rb следующим образом:

require 'refile/rails'
require 'refile/simple_form'

Мне интересно, перепутаны ли документы или часть simple_form не работает, потому что, если я переключу это на:

= jc.input :company_logo, as: :file, direct: true, presigned: true

person Chris Hough    schedule 09.02.2016    source источник


Ответы (1)


После продолжительной битвы вот как я нашел обходной путь для этой ситуации. Сначала я нашел этот пост SO Кнопка загрузки файла стиля для simple_form_for с Bootstrap в Rails 3, что побудило меня попробовать https://github.com/jasny/bootstrap/. У Jasny есть несколько замечательных загрузчиков файлов, но все они устарели. [Примечание: я надеюсь исправить это с помощью патча, поскольку у меня будет время на этой неделе], поэтому я загрузил файлы Jasny в папки с javascripts и таблицами стилей поставщика, как показано ниже:

введите здесь описание изображения

Я также использовал https://rails-assets.org/, чтобы вставитьholder.js в свой gemfile:

source 'https://rails-assets.org' do
  gem 'rails-assets-holderjs'
end

Затем я обновил свой файл application.js следующим образом:

//= require refile
//= require holderjs
//= require jasny-bootstrap

Затем мне понадобились стили в моей настройке sass:

// External Libraries Built For Bootstrap in Vendor
@import 'awesome-bootstrap-checkbox';
@import 'jasny-bootstrap';

Это дало мне инструменты для изменения моего загрузчика файлов в простой форме, чтобы:

= j.simple_fields_for :company do |jc|
  = jc.input :name
  div
    label
      = t('simple_form.labels.company.logo')
  div[class="form-group fileinput fileinput-new" data-provides="fileinput"]
    div[class="fileinput-new thumbnail" style="width: 200px; height: 200px;"]
      img[data-src="holder.js/200x200" alt="..."]
    div[class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 200px;"]
    div
      span[class="btn btn-default btn-file"]
        span[class="fileinput-new"]
          |Select image
        span[class="fileinput-exists"]
          |Change
        = jc.input_field :logo, direct: true, presigned: true
      a[href="#" class="btn btn-default fileinput-exists" data-dismiss="fileinput"]
        |Remove
    p[class="help-block"]
      = t('simple_form.hints.company.logo')      
  = jc.input :url
  = jc.input :email

В результате получился красивый загрузчик!

введите здесь описание изображения

Я хотел бы преобразовать это в частичный, но я подожду, пока у меня не будет другой формы загрузки файлов, чтобы решить эту проблему. Кроме того, если вы посмотрите на приведенный выше код, я следовал соглашению о локали, которое использует simple_form. Не красиво, но работает.

person Chris Hough    schedule 09.02.2016