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
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
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
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