J'ai une application fonctionnant bien sur Heroku et j'essaye de connecter l'application au service S3 d'Amazon avec Carrierwave. Je pensais que les fichiers de configuration fonctionnaient pour tout, mais je rencontre un problème lorsque je crée une image. Je pense que cela a à voir avec Postgres et une partie de sa mise en page spécifique, mais voici le problème principal.Postgres + Heroku Ruby Creation
Je reçois un TypeError (can't convert nil into String):
sur ce qui semble être le POST à la base de données (en particulier sur la méthode create). L'erreur se présente comme suit:
app/controllers/pictures_controller.rb:62:in `create'
TypeError (can't convert nil into String):
POST xxxxxxxx.herokuapp.com/684-536-025/pictures dyno=web.1 queue=0 wait=0ms service=510ms status=500 bytes=643
Voici le début du POST ainsi:
#<Picture id: nil, description: nil, image: nil, gallery_id: 15, gallery_url_id: "a432b35_21cc", original_filename: "Sunflower.gif", order_number: nil, created_at: nil, updated_at: nil>
Je suppose que la question ici est que Postgres ne permet pas à partir d'un POST quand il y a des champs c'est nul. Assez curieusement, sqlite ne me dérange pas, c'est pourquoi je suppose que le problème est Postgres et malheureusement, je vais utiliser Postgres pour la production. Je ne sais pas assez sur Postgres pour vraiment affiner ce problème, alors je me suis dit que je demanderais ici si je pouvais obtenir de l'aide/des conseils!
Merci!
EDIT: Voici la méthode de création d'une aide supplémentaire
def create
# Creates a picture class instance based on the json objects being passed in from
# Carrierwave
p_attr = params[:picture]
p_attr[:image] = params[:picture][:image].first if params[:picture][:image].class == Array
# Gets the gallery vai the uuid gallery url
@gallery = Gallery.where(:url_id => params[:url_id]).first
# Builds the picture based on the attributes passed in above from the json
@picture = @gallery.pictures.build(p_attr)
# Assigns the gallery_url_id attribute
@picture.gallery_url_id = @gallery.url_id
puts @picture.inspect
# Handle the picture save according to success or not
LINE 62 -> if @picture.save
respond_to do |format|
format.html {
# Calls the method in the model to format the json repsonse
render :json => [@picture.to_jq_upload].to_json,
:content_type => 'text/html',
:layout => false
}
format.json {
render :json => [@picture.to_jq_upload].to_json
}
end
else
render :json => [{:error => "custom_failure"}], :status => 304
end
fin
ligne 62 est marquée dans le code.
EDIT 2: Voici le modèle comme l'a demandé ...
class Picture < ActiveRecord::Base
# The attributes accesible via an @picture
attr_accessible :gallery_id, :description, :image, :gallery_url_id, :original_filename, :order_number
belongs_to :gallery
# Attatches the carrierwave uploader to the picture class
mount_uploader :image, ImageUploader
# Referenced when each picture is created, the json is formatted as the following form
def to_jq_upload
{
"name" => read_attribute(:image),
"size" => image.size,
"url" => image.url,
"thumbnail_url" => image.thumb.url,
"delete_url" => id,
"picture_id" => id,
"delete_type" => "DELETE",
"url_id" => read_attribute(:gallery_url_id),
"original_filename" => read_attribute(:original_filename),
"order_number" => ""
}
end
end
quelle est exactement la ligne 62 dans votre contrôleur d'images et quel champ est nul provoquant l'erreur de type? app/controllers/pictures_controller.rb: 62: dans 'create ' – bento
Je vais mettre à jour le post avec la méthode create, vu que cela pourrait aider. Il pourrait avoir à faire face à la recherche d'attribut si ... – user1470511
Pouvons-nous voir un modèle de photo s'il vous plaît? – Andrei