2016-07-21 3 views
0

У меня такая проблема, когда я не могу отображать свои изображения в качестве параметров для выбора формы. Я хочу создать фотоальбом и в то же время выбирать фотографии для добавления в альбом.Ruby on Rails отображает изображение как флажок в форме

Я попробовал «collection_check_boxes», но я не могу получить существующие изображения для отображения в качестве параметров. И я еще не пытался создать (сохранить) его.

У меня есть мои ассоциации. Я использую самоцвет для портрета для изображения.

Модели:

class Album < ActiveRecord::Base 
    belongs_to :user 
    has_many :photos 
end 

class Photo < ActiveRecord::Base 
    belongs_to :owner, class_name: 'User' 
    belongs_to :album 
    has_attached_file :image, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png" 
    validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/ 
end 

Контроллер:

class AlbumsController < ApplicationController 
    before_action :authenticate_user!, only: [:create, :new] 

    def index 
    @albums = current_user.albums 
    end 

    def new 
    @photos = current_user.photos.all 
    @album = Album.new 
    end 

    def create 
    @album = albums.new(album_params) 
    if @album.save 
     redirect_to user_album_path(@album) 
    else 
     redirect_to root_path 
    end 
    end 

    def show 
    @album = Album.find(params[:id]) 
    end 

    def add_photo 
    end 

    private 
    def album_params 
     params.require(:album).permit(:name) 
    end 
end 

Просмотров:

<%= form_for @album, url: user_albums_path do |f| %> 
    <form> 
     <div class="field"> 
     <%= f.label :Name %><br /> 
     <%= f.text_field :name %> 
     </div> 

     ####################Tried this but didn't work because the image isn't a text_method 
     <div> 
     <%= collection_check_boxes(:albums, :photo_ids, current_user.photos.all, :id, image_went_here) %> 
     </div> 
     #################### 
     <div class="actions"> 
     <%= f.submit "Create" %> 
     </div> 
    </form> 

    <% end %> 

ответ

0
collection_check_boxes(:albums, :photo_ids, 
         current_user.photos.all, :id, :id) do |b| 
    b.label(class: "check_box") { 
     b.check_box(class: "check_box") + image_tag(object.image.url) 
    } 
end 

Где object предоставляется блоку, представляющему Photo, в current_user.photos.all. Вам может потребоваться изменить ссылку object.photo.url, чтобы соответствовать вашей модели Photo. См. Примеры предоставления collection_check_boxes блока в documentation.

+0

Эй, спасибо за ответ. Я попробовал ваше предложение, но, к сожалению, у меня были проблемы с отображением изображения. Он продолжает говорить, что объект, который я использовал, не определен. Однако я все-таки решил это по-другому. –

0

Поэтому мне удалось решить эту проблему, создав метод в Модели, чтобы заполнить аргумент text_method.

Вид:

<%= collection_check_boxes(:albums, :photo_ids, @photos, :id, :myPhoto) %> 

Модель:

def myPhoto 
    ActionController::Base.helpers.image_tag("#{image.url(:thumb)}") 
end 

Модель инстанс метод позволил мне вставить image_tag в collection_check_boxes.

Смежные вопросы