Created
August 15, 2016 19:02
-
-
Save frcake/2683d8a681e880acb4830fb02d1e8607 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Classified < ApplicationRecord | |
belongs_to :user | |
has_many :photos | |
accepts_nested_attributes_for :photos | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ClassifiedsController < ApplicationController | |
before_action :require_user, only: [:index, :show] | |
def new | |
@classified = Classified.new | |
@photo = @classified.photos.build | |
end | |
def index | |
@classified = Classified.all | |
end | |
def show | |
@classified = Classified.find(params[:id]) | |
end | |
def edit | |
@classified = Classified.find(params[:id]) | |
end | |
def update | |
@classified = Classified.find(params[:id]) | |
if @classified.update_attributes(classified_params) | |
redirect_to '/' | |
else | |
redirect_to '/' | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Processing by ClassifiedsController#create as HTML | |
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Xar6eiClpg4EtaihHCsKuPvfHZjOLgagcXlkB6EW3YO5UKgKzSU+Xo5+4EGVKPzljsGLE6p/JxVeQBNLVAZOSw==", "classified"=>{"make"=>"kdhf", "model"=>"yid", "year"=>"dtyi", "title"=>"dtyi", "condition"=>"dyti", "make_country"=>"dtyi", "price"=>"tydi", "description"=>"dyti", "photos_attributes"=>{"0"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007f1ec21689c8 @tempfile=#<Tempfile:/tmp/RackMultipart20160815-15158-ed3vq1.JPG>, @original_filename="IMG_0367.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"classified[photos_attributes][0][image]\"; filename=\"IMG_0367.JPG\"\r\nContent-Type: image/jpeg\r\n">}}}, "commit"=>"Create Classified"} | |
Command :: file -b --mime '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1y57b8t.JPG' | |
Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' 2>/dev/null | |
Command :: identify -format %m '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' | |
Command :: convert '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' -auto-orient -resize "600x170" '/tmp/f7a62ccc518343a663edf66b07d7245c20160815-15158-572p8w' | |
Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' 2>/dev/null | |
Command :: identify -format %m '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' | |
Command :: convert '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' -auto-orient -resize "250x250!" '/tmp/f7a62ccc518343a663edf66b07d7245c20160815-15158-yboo18' | |
Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' 2>/dev/null | |
Command :: identify -format %m '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' | |
Command :: convert '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' -auto-orient -resize "100x100>" '/tmp/f7a62ccc518343a663edf66b07d7245c20160815-15158-13uo06a' | |
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 4], ["LIMIT", 1]] | |
(0.1ms) begin transaction | |
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 4], ["LIMIT", 1]] | |
Command :: file -b --mime '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-qz9itf.JPG' | |
(0.1ms) rollback transaction | |
Rendering classifieds/create.html.erb within layouts/application | |
Rendered classifieds/_gear.html.erb (4.9ms) | |
Rendered classifieds/_description.html.erb (0.4ms) | |
Rendered classifieds/create.html.erb within layouts/application (7.0ms) | |
Completed 200 OK in 422ms (Views: 37.6ms | ActiveRecord: 2.7ms) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Photos classified must exist |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Photo < ApplicationRecord | |
belongs_to :classified | |
has_attached_file :image, :styles => { :large => "600x170", :medium => "250x250!",:thumb => "100x100>" }, :default_url => lambda { |photo| photo.instance.set_default_url} | |
validates_attachment_content_type :image, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"] | |
validates_attachment_presence :datafile unless :datafile | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Rails.application.routes.draw do | |
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html | |
#map.resources :users, :has_many => :classifieds | |
get '/' => 'classifieds#index' | |
#get 'show/:id' => 'classifieds#show' , as: :classified | |
get 'signup' => 'users#new' , as: :signup | |
resources :users | |
post 'signup' => 'users#create' | |
get '/edit/:id' => 'users#edit' , as: :edit | |
post 'update' => 'users#update' , as: :update | |
get '/login' => 'sessions#new' , as: :login | |
post '/login' => 'sessions#create' | |
delete '/logout' => 'sessions#destroy' | |
get '/profile/:id' => 'users#show' , as: :profile | |
get '/newlisting' => 'classifieds#new' , as: :newlisting | |
resources :classifieds | |
post '/newlisting' => 'classifieds#create' | |
get '/editlisting/:id' => 'classifieds#edit' , as: :editlisting | |
# post 'update' => 'classifieds#update' | |
get '/listing/:id' => 'users#list' , as: :listinglist #list inside profile navtab | |
get 'back' => 'application#back' , as: :back | |
#photo stuff | |
#resources :photos, only: [:new, :create, :index, :destroy] | |
#get 'photo/new' => 'photos#new' | |
#get 'photoindex' => 'photos#index' ,as: :photoindex | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Im using paperclip as a nested attribute and trying to upload the photo at the model creation with f.submit | |
The photos model belongs_to classified model.. | |
c:\Site\brokerv1\brokr>rails --version | |
Rails 5.0.0 | |
c:\Site\brokerv1\brokr>ruby -v | |
ruby 2.2.4p230 (2015-12-16 revision 53155) [i386-mingw32] | |
gem "paperclip", "~> 4.2" | |
Problem is that after the submission i get a "rollback transaction" from paperclip. | |
Another weird thing is that i can actually go and see the file saved in the path mentioned by paperclip... | |
models: | |
class Photo < ApplicationRecord | |
belongs_to :classified | |
has_attached_file :image, :styles => { :large => "600x170", :medium => "250x250!",:thumb => "100x100>" }, :default_url => lambda { |photo| photo.instance.set_default_url} | |
validates_attachment_content_type :image, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"] | |
validates_attachment_presence :datafile unless :datafile | |
end | |
class Classified < ApplicationRecord | |
belongs_to :user | |
has_many :photos | |
accepts_nested_attributes_for :photos | |
end | |
Schema.rb | |
ActiveRecord::Schema.define(version: 20160814114331) do | |
create_table "classifieds", force: :cascade do |t| | |
t.string "make" | |
t.string "model" | |
t.string "year" | |
t.string "color" | |
t.string "title" | |
t.string "condition" | |
t.string "price" | |
t.string "offer" | |
t.string "make_country" | |
t.string "category" | |
t.text "description" | |
t.integer "user_id" | |
t.datetime "created_at", null: false | |
t.datetime "updated_at", null: false | |
t.index ["user_id"], name: "index_classifieds_on_user_id" | |
end | |
create_table "photos", force: :cascade do |t| | |
t.integer "classified_id" | |
t.datetime "created_at", null: false | |
t.datetime "updated_at", null: false | |
t.string "image_file_name" | |
t.string "image_content_type" | |
t.integer "image_file_size" | |
t.datetime "image_updated_at" | |
t.index ["classified_id"], name: "index_photos_on_classified_id" | |
end | |
create_table "users", force: :cascade do |t| | |
t.string "first_name" | |
t.string "email" | |
t.string "password_digest" | |
t.datetime "created_at", null: false | |
t.datetime "updated_at", null: false | |
end | |
end | |
Controller | |
class ClassifiedsController < ApplicationController | |
before_action :require_user, only: [:index, :show] | |
def new | |
@classified = Classified.new | |
@photo = @classified.photos.build | |
end | |
def index | |
@classified = Classified.all | |
end | |
def show | |
@classified = Classified.find(params[:id]) | |
end | |
def edit | |
@classified = Classified.find(params[:id]) | |
end | |
def update | |
@classified = Classified.find(params[:id]) | |
if @classified.update_attributes(classified_params) | |
redirect_to '/' | |
else | |
redirect_to '/' | |
end | |
end | |
def destroy | |
flash[:success] = "deleted" | |
if Classified.find(params[:id]).destroy | |
redirect_to '/' | |
else | |
redirect_to '/' | |
end | |
end | |
def create | |
@classified = Classified.new(classified_params) | |
@classified.user_id = current_user.id | |
if @classified.save | |
redirect_to '/' | |
else | |
render 'create' | |
end | |
end | |
private | |
def classified_params | |
params.require(:classified).permit(:make ,:model,:year,:color,:title,:condition,:price,:offer,:make_country ,:category ,:description ,:photos_attributes => [:id , :image , :classified_id ] ) | |
end | |
end | |
View: | |
<div class="new"> | |
<div class="container-fluid"> | |
<section class="container"> | |
<div class="container-page"> | |
<div class="col-md-6"> | |
<h3 class="dark-grey">Εξοπλισμός προς πώληση</h3> | |
<%= form_for (@classified) , :html => { :multipart => true } do |f| %> | |
<% if @classified.errors.any? %> | |
<div id="error_explanation"> | |
<h2> | |
<%= pluralize(@classified.errors.count, "error") %> prohibited | |
this article from being saved: | |
</h2> | |
<ul> | |
<% @classified.errors.full_messages.each do |msg| %> | |
<li><%= msg %></li> | |
<% end %> | |
</ul> | |
</div> | |
<% end %> | |
<div class="form-group col-lg-3"> | |
<label>Μάρκα</label> | |
<%= f.text_field :make, :placeholder => "π.χ. Fender" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-6"> | |
<label>Μοντέλο</label> | |
<%= f.text_field :model, :placeholder => "π.χ. Stratocaster" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-3"> | |
<label>Έτος</label> | |
<%= f.text_field :year, :placeholder => "π.χ. 1992" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-12"> | |
<label>Τίτλος Αγγελίας</label> | |
<%= f.text_field :title, :placeholder => "" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-5"> | |
<label>Κατάσταση</label> | |
<%= f.text_field :condition, :placeholder => "" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-4"> | |
<label>Χώρα κατασκευής</label> | |
<%= f.text_field :make_country, :placeholder => "" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-3"> | |
<label>Τιμή</label> | |
<%= f.text_field :price, :placeholder => "" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-12"> | |
<h3 class="dark-grey">Περιγραφή</h3> | |
<%= f.text_area :description, rows: "15", :placeholder => "" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-12"> | |
<h3 class="dark-grey">Φωτογραφίες</h3> | |
<%= f.fields_for :photos do |p| %> | |
<%= p.file_field :image %> | |
<% end %> | |
</div> | |
<div class="linkbtn"> | |
<%= f.submit nil, class: "btn-submit" %> | |
<% end %> | |
</div> | |
</div> | |
Console output: | |
Processing by ClassifiedsController#create as HTML | |
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Xar6eiClpg4EtaihHCsKuPvfHZjOLgagcXlkB6EW3YO5UKgKzSU+Xo5+4EGVKPzljsGLE6p/JxVeQBNLVAZOSw==", "classified"=>{"make"=>"kdhf", "model"=>"yid", "year"=>"dtyi", "title"=>"dtyi", "condition"=>"dyti", "make_country"=>"dtyi", "price"=>"tydi", "description"=>"dyti", "photos_attributes"=>{"0"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007f1ec21689c8 @tempfile=#<Tempfile:/tmp/RackMultipart20160815-15158-ed3vq1.JPG>, @original_filename="IMG_0367.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"classified[photos_attributes][0][image]\"; filename=\"IMG_0367.JPG\"\r\nContent-Type: image/jpeg\r\n">}}}, "commit"=>"Create Classified"} | |
Command :: file -b --mime '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1y57b8t.JPG' | |
Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' 2>/dev/null | |
Command :: identify -format %m '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' | |
Command :: convert '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' -auto-orient -resize "600x170" '/tmp/f7a62ccc518343a663edf66b07d7245c20160815-15158-572p8w' | |
Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' 2>/dev/null | |
Command :: identify -format %m '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' | |
Command :: convert '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' -auto-orient -resize "250x250!" '/tmp/f7a62ccc518343a663edf66b07d7245c20160815-15158-yboo18' | |
Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' 2>/dev/null | |
Command :: identify -format %m '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' | |
Command :: convert '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-1wgarr9.JPG[0]' -auto-orient -resize "100x100>" '/tmp/f7a62ccc518343a663edf66b07d7245c20160815-15158-13uo06a' | |
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 4], ["LIMIT", 1]] | |
(0.1ms) begin transaction | |
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 4], ["LIMIT", 1]] | |
Command :: file -b --mime '/tmp/8c1670d3211dcd380aba6a73797c0a1e20160815-15158-qz9itf.JPG' | |
(0.1ms) rollback transaction | |
Rendering classifieds/create.html.erb within layouts/application | |
Rendered classifieds/_gear.html.erb (4.9ms) | |
Rendered classifieds/_description.html.erb (0.4ms) | |
Rendered classifieds/create.html.erb within layouts/application (7.0ms) | |
Completed 200 OK in 422ms (Views: 37.6ms | ActiveRecord: 2.7ms) | |
And the error I'm getting at f.submit : | |
Photos classified must exist | |
ruby-on-rails upload associations paperclip | |
shareeditdeleteflag | |
edited 8 hours ago | |
asked 2 days ago | |
frcake | |
516 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div class="new"> | |
<div class="container-fluid"> | |
<section class="container"> | |
<div class="container-page"> | |
<div class="col-md-6"> | |
<h3 class="dark-grey">Εξοπλισμός προς πώληση</h3> | |
<%= form_for (@classified) , :html => { :multipart => true } do |f| %> | |
<% if @classified.errors.any? %> | |
<div id="error_explanation"> | |
<h2> | |
<%= pluralize(@classified.errors.count, "error") %> prohibited | |
this article from being saved: | |
</h2> | |
<ul> | |
<% @classified.errors.full_messages.each do |msg| %> | |
<li><%= msg %></li> | |
<% end %> | |
</ul> | |
</div> | |
<% end %> | |
<div class="form-group col-lg-3"> | |
<label>Μάρκα</label> | |
<%= f.text_field :make, :placeholder => "π.χ. Fender" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-6"> | |
<label>Μοντέλο</label> | |
<%= f.text_field :model, :placeholder => "π.χ. Stratocaster" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-3"> | |
<label>Έτος</label> | |
<%= f.text_field :year, :placeholder => "π.χ. 1992" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-12"> | |
<label>Τίτλος Αγγελίας</label> | |
<%= f.text_field :title, :placeholder => "" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-5"> | |
<label>Κατάσταση</label> | |
<%= f.text_field :condition, :placeholder => "" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-4"> | |
<label>Χώρα κατασκευής</label> | |
<%= f.text_field :make_country, :placeholder => "" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-3"> | |
<label>Τιμή</label> | |
<%= f.text_field :price, :placeholder => "" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-12"> | |
<h3 class="dark-grey">Περιγραφή</h3> | |
<%= f.text_area :description, rows: "15", :placeholder => "" , :class => "form-control"%> | |
</div> | |
<div class="form-group col-lg-12"> | |
<h3 class="dark-grey">Φωτογραφίες</h3> | |
<%= f.fields_for :photos do |p| %> | |
<%= p.file_field :image %> | |
<% end %> | |
</div> | |
<div class="linkbtn"> | |
<%= f.submit nil, class: "btn-submit" %> | |
<% end %> | |
</div> | |
</div> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment