2016-06-22 13 views
0

relativ neu für Ruby on Rails und ich erstelle ein einfaches Uploads-Modell für Paperclip-Bilder zum Anhängen und Anzeigen. Ich habe das alles gut funktioniert, aber ich möchte einen aktuellen Benutzer beschränken, um nicht mehr als 6 Bilder zu einem bestimmten Zeitpunkt zu laden.Wie kann die Anzahl der Uploads vom Benutzer begrenzt werden?

In welcher Datei und welchem ​​Code würde ich das hinzufügen? Es wäre sehr hilfreich, dies für jedes zukünftige Modell zu wissen, das ich erstelle!

Ich nehme an, es ist ein ziemlich kleines Stück Code, aber ich kann nirgendwo online eine Antwort sehen ... Danke!

meinen UploadsController (tat ein einfaches Gerüst und Büroklammer-Setup):

class UploadsController < ApplicationController 
     before_action :set_upload, only: [:show, :edit, :update, :destroy] 

     # GET /uploads 
     # GET /uploads.json 
     def index 
     @uploads = Upload.all 
     end 

     # GET /uploads/1 
     # GET /uploads/1.json 
     def show 
     end 

     # GET /uploads/new 
     def new 
     @upload = current_user.uploads.build 
     end 

     # GET /uploads/1/edit 
     def edit 
     end 

     # POST /uploads 
     # POST /uploads.json 
     def create 
     @upload = current_user.uploads.build(upload_params) 

     respond_to do |format| 
      if @upload.save 
      format.html { redirect_to @upload, notice: 'Upload was successfully created.' } 
      format.json { render :show, status: :created, location: @upload } 
      else 
      format.html { render :new } 
      format.json { render json: @upload.errors, status: :unprocessable_entity } 
      end 
     end 
     end 

     # PATCH/PUT /uploads/1 
     # PATCH/PUT /uploads/1.json 
     def update 
     respond_to do |format| 
      if @upload.update(upload_params) 
      format.html { redirect_to @upload, notice: 'Upload was successfully updated.' } 
      format.json { render :show, status: :ok, location: @upload } 
      else 
      format.html { render :edit } 
      format.json { render json: @upload.errors, status: :unprocessable_entity } 
      end 
     end 
     end 

     # DELETE /uploads/1 
     # DELETE /uploads/1.json 
     def destroy 
     @upload.destroy 
     respond_to do |format| 
      format.html { redirect_to uploads_url, notice: 'Upload was successfully destroyed.' } 
      format.json { head :no_content } 
     end 
     end 

     private 
     # Use callbacks to share common setup or constraints between actions. 
     def set_upload 
      @upload = Upload.find(params[:id]) 
     end 

     # Never trust parameters from the scary internet, only allow the white list through. 
     def upload_params 
      params.require(:upload).permit(:upload_title, :upload_description, :upload_datecreated, :user_id, :picture, :delete_picture) 
     end 
    end 

hochladen Modell:

class Upload < ActiveRecord::Base 
     belongs_to :user 
     has_attached_file :picture, styles: { large: "600x600#", medium: "300x300#", small: "150x150#", thumb: "50x50#" }, default_url: "/images/:style/missing.png" 
     validates_attachment_content_type :picture, content_type: /\Aimage\/.*\Z/ 

     before_validation { image.clear if @delete_image } 

     def delete_picture 
      @delete_image ||= false 
     end 

     def delete_picture=(value) 
      @delete_image = !value.to_i.zero? 
     end 
     end 

Antwort

1
class Upload < ActiveRecord::Base 

    MAX_IMAGES = 6 
    validate :maximum_images 

    private 

    def count_valid_images 
    self.user.uploads.count 
    end 

    def maximum_images 
    errors.add(:base, "must have max #{MAX_IMAGES} images") if count_valid_images > MAX_IMAGES 
    end 


end 
+0

Dank für die schnelle Antwort Dennis aber das scheint nicht zu funktionieren mich. Ich habe genau wie oben zu meinem Upload-Modell hinzugefügt, kann aber immer noch mehr als sechs Bilder mit einem Benutzer verbinden. Der Name meines Büroklammer-Anhangs ist "Bild", nicht "Bild", wäre das überhaupt wichtig? – Senator

+0

Das Bild ist ein Attribut zum Upload-Modell. Dein Model Benutzer has_many: uploads. Bist du sicher, dass der Upload das Attribut user_id enthält ?, versuche es in der Konsole. User.first.uploads.count – DennisCastro

+0

Es ist seltsam, wenn ich das Benutzerattribut für jeden Datensatz im Upload-Modell ansehe, ist es eine lange unverständliche ID #, die für jeden Datensatz unterschiedlich ist. Die user_id ist jedoch die normale numerische # für diesen Benutzer ... macht Devise hier etwas Seltsames? – Senator