2013-03-24 2 views
1

У меня есть приложение, которое я создаю, у которого есть альбомы с изображениями. Я хочу, чтобы идентификатор изображения начинался с 1, когда они были добавлены в альбом. Однако, с моей текущей настройкой, они не сбрасываются для каждого альбома, но продолжают их нумерацию от одного альбома к другому.Сбросить первичный идентификатор для вложенных/дочерних ресурсов

Модели

class Album < ActiveRecord::Base 
    attr_accessible :title, :description, :album_id 
    has_many :images, :dependent => :destroy 
    validates :title, :description, :presence => true 
end 


class Image < ActiveRecord::Base 
    attr_accessible :title, :description, :picture, :image_id, :album_id, :albumcover 
    belongs_to :album 
    accepts_nested_attributes_for :album 
    mount_uploader :picture, PictureUploader 
end 

Controller Image

class Admin::ImagesController < ApplicationController 
    respond_to :html, :json 
    def index 
     @album = Album.find(params[:album_id]) 
     @images = @album.images.all 
    end 
    def new 
     @album = Album.find(params[:album_id]) 
     @image = @album.images.new(params[:id]) 
    end 
    def create 
     @album = Album.find(params[:album_id]) 
     @image = @album.images.new(params[:image]) 
     if @image.save 
      flash[:notice] = "Successfully added image!" 
      redirect_to [:admin, @album, :images] 
     else 
      render :action => 'new' 
     end 
    end 
    def show 
     @album = Album.find(params[:album_id]) 
     @image = @album.images.find(params[:id]) 
    end 
    def edit 
     @album = Album.find(params[:album_id]) 
     @image = @album.images.find(params[:id]) 
    end 
    def update 
     @album = Album.find(params[:album_id]) 
     @image = @album.images.find(params[:id]) 
     if @image.update_attributes(params[:image]) 
      flash[:notice] = "Successfully updated Image" 
      redirect_to [:admin, @album, :images] 
     else 
      render :action => "edit" 
     end 
    end 
    def destroy 
     @album = Album.find(params[:album_id]) 
     @image = @album.images.find(params[:id]) 
     @image.destroy 
     @albumid = @album.id 
     @id = @image.id 
     FileUtils.remove_dir("#{Rails.root}/public/uploads/image/picture/#{@albumid}/#{@id}", :force => true) 
     redirect_to admin_album_images_path(@album) 
    end 

end 

Как сделать начало нумерации на 1 в каждом альбоме?

ответ

0

«Я хочу, чтобы идентификатор на изображении, чтобы начать в 1»

image_id поле представляет собой поле идентификатора базы данных, которая, вероятно, автоинкрементная. Он основан на количестве строк в таблице изображений и не имеет ничего общего с ассоциацией между изображением и альбомом. Вероятно, не очень хорошая логика, зависящая от нее.

Мне любопытно, почему вы хотите серийный номер для изображений. Для например, если вы хотите заказать изображения в альбоме, один вариант был бы:

album.images.sort_by(&:created_at) 

Другой вариант, чтобы добавить дополнительный столбец в таблице изображений под названием SERIAL_NUMBER и управлять им самостоятельно.

Если вы можете поделиться тем, чего хотите достичь с помощью серийного номера, вы получите ответы на более качественные ответы!

+0

Я хочу, чтобы идентификатор начинал заново в каждом альбоме в основном для заказа. Это та же идея для комментариев в блоге. Первый комментарий будет id 1, следующий - id 2 и т. Д. Это то, что я хочу для альбомов. В каждом из них первое изображение - id 1, второе - id 2 и т. Д. –

+0

Если вы не хотите перегруппировать свои изображения, тогда я буду использовать предложение CubaLibre, а затем метод 'each_with_index' во время записи на экране. Старайтесь не загрязнять вашу базу данных ненужными данными. –

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