Rails 3.0-related download model 'save to' image

My Rails 3.0.3 has a “month” that has a link where the user can upload the image using “save to." Now I need to create an association in which the model of the month belongs to the wallpaper model.

Routes

root :to => 'inicio#index' resources :wallpapers do resources :months end # the route that works with no association # match 'download/:id' => 'months#download', :as => :download # the route I tried match 'wallpapers/:id/months/:id' => 'months#download', :as => :download 

Model of the month:

 class Month < ActiveRecord::Base belongs_to :wallpaper has_attached_file :wallpaper_picture, :styles => { :default => { :geometry => '530x330', :quality => 80, :format => 'jpg'} } end 

Friendlyid Wallpaper Model:

 class Wallpaper < ActiveRecord::Base has_many :months, :dependent => :destroy extend FriendlyId friendly_id :title, :use => :slugged end 

In months_controller, I created a loading method, this method works without association:

 class MonthsController < InheritedResources::Base belongs_to :wallpaper, :finder => :find_by_slug! def download @wallpaper = Wallpaper.find(params[:wallpaper_id]) @month = @wallpaper.month.find(params[:id]) send_file @month.wallpaper_picture.path, :filename => @month.wallpaper_picture_file_name, :type => @month.wallpaper_picture_content_type, :disposition => 'attachment' end end 

View Months / Index

 - @months.each do |month| = link_to image_tag(month.wallpaper_picture(:default)), wallpaper_month_path(month.wallpaper, month) 

I tried changing the days_controller method to load, but this is wrong:

 @months = Wallpaper.month.conditions({:person_id => some_id}) 
0
ruby-on-rails-3
source share
1 answer

That's how I got it. Routes

 resources :wallpapers do resources :months end match 'wallpaper/:wallpaper_id/download/:id' => 'months#download', :as => :download 

In the routes I have to pass: wallpaper_id (has_many: months),
: id - identifier of the current controller (belongs to wallpaper: wallpaper)
'download' will be the name of the path used in the view 'download_path'
In this way I have to pass the foreign key and id

View Months / Index

 - @months.each do |month| = link_to 'Download Picture', download_path(month.wallpaper_id, month.id) 

In the months_controller method, the boot method will receive these parameters and pass the associated image to the send_file method.

 def download @wallpaper = Wallpaper.find(params[:wallpaper_id]) @month = @wallpaper.months.find(params[:id]) send_file @month.wallpaper_picture.path, :filename => @month.wallpaper_picture_file_name, :type => @month.wallpaper_picture_content_type, :disposition => 'attachment' end 

PD: if send_file does not work in Production, change it to send_data or
comment out this line in config / production.rb

 config.action_dispatch.x_sendfile_header = "X-Sendfile" 

send_file just sends an empty file

0
source share

All Articles