6

Chcę, aby moje pole Railsów przesyłano w prostym polu przesyłania obrazów za pomocą Jasny's Twitter Bootstrap extension. Już (z powodzeniem) używam CarrierWave do przesyłania zdjęć.Jak zaimplementować rozszerzenie stylu ładowania ładującego Jaślaka w Railsach simple_form?

Obecnie moja forma działa, a kod wygląda następująco (I zostały zabrane jakieś html, kilka pól formularza i opracowanie komunikatów o błędach Code) dla jasności:

<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => {class: "form-horizontal", :method => :put }) do |f| %> 

    <%= f.input :username, :label => "username" %> 

    <%= f.simple_fields_for :picture do |pic| %> 
    <%= pic.input :image, :as => :file, :label => "upload a photo" %> 
    <% end %> 

    <%= f.input :current_password, :label => "enter password to confirm update(s)" %> 
    <%= f.button :submit, "Update", class: "btn btn-success" %> 

<% end %> 

W „simple_fields_for: obraz” część daje następujący kod HTML:

<div class="control-group file optional"> 
    <label class="file optional control-label" for="user_picture_attributes_image"> 
    upload a photo 
    </label> 
    <div class="controls"> 
    <input class="file optional" id="user_picture_attributes_image" name="user[picture_attributes][image]" type="file"> 
    </div> 
</div> 

użyć kodu Jasny, pomyślałem, może mógłbym wymienić „simple_fields_for: obraz” część z kodem z ich dokumentacją, oprócz tego, że -w całkiem beznadziejny attempt- I” ve ręcznie dodał to do input-tag: id = "use r_picture_attributes_image”name = "user [picture_attributes] [Obrazek]"

<div class="fileupload fileupload-new" data-provides="fileupload"> 
    <div class="input-append"> 
    <div class="uneditable-input span3"> 
     <i class="icon-file fileupload-exists"></i> 
     <span class="fileupload-preview"></span> 
    </div> 
    <span class="btn btn-file"> 
     <span class="fileupload-new">Select file</span> 
     <span class="fileupload-exists">Change</span> 
     <input type="file" id="user_picture_attributes_image" name="user[picture_attributes][image]"/> 
    </span> 
    <a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Remove</a> 
    </div> 
</div> 

To nie działa (duh: D). Nie jestem na tyle biegły, by zrozumieć, co się dzieje z częścią javascript w bootstrap-fileupload.js Jasnego, ani pod maską z simple_form, więc nie wiem, czy mógłbym coś tam zmienić, żeby działało. Niektórzy googli mówią, że ktoś stworzył rozszerzenie rails-jasny-bootstrap-extension, ale nie ma w nim jeszcze kodu poza oryginalnymi css i js. Rysunek pusty dość mocno tutaj.

Dla kontekstu: źródłem tutaj jest Użytkownik. Moja user.rb wygląda następująco (odpowiedni kod):

class User < ActiveRecord::Base 
    has_one :picture, as: :attachable, :dependent => :destroy 
    accepts_nested_attributes_for :picture 
end 

A mój model obraz wygląda tak:

class Picture < ActiveRecord::Base 
    attr_accessible :image, :remote_image_url, :remove_image, :thumb_width, :thumb_height 
    attr_accessible :attachable_id, :attachable_type 
    belongs_to :attachable, polymorphic: true 
    mount_uploader :image, ImageUploader 
end 

Screenshot pożądanego różnicą, wizualnie (zignorować stylizacji):

screenshot

Link to Jasny's bootstrap-fileupload.zip Z góry dziękuję za spojrzenie i przepraszam za ścianą tekstu; daj mi znać, jeśli chcę dodać inne informacje. (. PS .: czy ktoś zna łatwą alternatywę, która również zauważyć)

+0

Czy możesz umieścić swoje pliki 'application.js' i' application.css'? –

+0

Tak, przepraszam, nie wspomniałem o tym. Mam cały plik "bootstrap-fileupload.css" wklejony do mojego już istniejącego pliku "bootstrap.css" na dole; samo dla "bootstrap-fileupload.js" do "bootstrap.js". – rmatena

+0

Czy style działają poprawnie w ten sposób? Jak widzę na zrzucie ekranu, obecnie nie ma pola pliku (jeśli dobrze zrozumiałem). –

Odpowiedz

4

Możesz spróbować użyć pliku file.field zamiast wejścia.

Od:

<%= f.simple_fields_for :picture do |pic| %> 
    <%= pic.input :image, :as => :file, :label => "upload a photo" %> 
<% end %> 

Do:

<%= f.simple_fields_for :picture do |pic| %> 
    <%= pic.file_field :image %> 
<% end %> 

To nie doda fantazyjne pomocników formularza z simple_form.

+0

Wielkie dzięki, działało! – rmatena

+0

Działa dla f.file_field, ale nie działa dla file_field_tag. Czy masz jakieś sugestie, jak to zrobić? – anu

+0

Nie działa w IE8 LUB IE9 –

1

Spróbuj tego:

<%= f.simple_fields_for :picture do |pic| %> 

    <div class="fileupload fileupload-new" data-provides="fileupload"> 
    <div class="input-append"> 
    <div class="uneditable-input span3"> 
    <i class="icon-file fileupload-exists"></i> 
<span class="fileupload-preview"></span></div> 
<span class="btn btn-file"><span class="fileupload-new">Select file</span> 
<span class="fileupload-exists">Change</span> 
<%= pic.input :image, :as => :file, :label => "upload a photo" %> 
</span> 
<a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Remove</a> 
</div> 
</div> 

<% end %> 

Wystarczy włożyć erb w html Bootstrap za.

+0

problemem jest to, że generuje on również oryginalny materiał simple_form wokół niego: [zrzut ekranu] (http://monosnap.com/image/qNwSsQSHFCpCNStIQVL2a44aP.png) – rmatena

0

Jeśli nie znalazłeś jeszcze odpowiedniego rozwiązania, oto ona:

<%= f.input :picture, :label => 'Upload Picture' do %> 
<div class="fileupload fileupload-new" data-provides="fileupload"> 
    <div class="input-append"> 
    <div class="uneditable-input span3"> 
     <i class="icon-file fileupload-exists"></i> 
     <span class="fileupload-preview"></span> 
    </div> 
    <span class="btn btn-file"> 
     <span class="fileupload-new">Select file</span> 
     <span class="fileupload-exists">Change</span> 
     <%= f.file_field :picture %> 
    </span> 
    <a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Remove</a> 
    </div> 
</div> 
<% end %> 

ta powinna idealnie wyrównać z resztą pól formularza.

+0

Działa dla f.file_field, ale nie działa dla file_field_tag. Czy masz jakieś sugestie, jak to zrobić? – anu

+0

Jeśli możesz podać więcej szczegółów na temat tego, co "nie działa", pomogłoby to. Z punktu widzenia HTML, f.file_field i file_field_tag ​​powinny generować podobny HTML, jeśli przekażemy poprawne opcje. Tak naprawdę nie widzę powodu, dla którego nie powinien działać. – San

Powiązane problemy