2017-08-24 2 views
0

J'ai un contrôleur de reprise et un contrôleur de bienvenue dans mon application. Le contrôleur de bienvenue a seulement une action d'index qui est là pour la page racine. Le but du contrôleur de CV est de télécharger (nouveau/créer), télécharger (télécharger) etc. fichiers pdf comme un utilisateur connecté et cela fonctionne très bien jusqu'à présent.Comment accéder à une variable à partir d'un autre contrôleur pour effectuer une action de téléchargement personnalisée

Je souhaite également implémenter la fonction de téléchargement de CV sur la page de démarrage (welcome_controller/index).

Comment puis-je accomplir ceci? Depuis que je ne peux pas appeler la variable pour accéder au modèle de reprise depuis le contrôleur de bienvenue. Comment devraient être les routes? Que dois-je modifier sur le welcome_controller?

routes.rb

Rails.application.routes.draw do 

    devise_for :users 

    root 'welcomes#index' 

    resources :resumes do 
    get :download, on: :member 
    end 

    get '*path' => redirect('/') 
end 

resumes_controller.rb

class ResumesController < ApplicationController 
    around_filter :catch_not_found 
    before_action :find_resume, only: [ :show, :edit, :update, :destroy, :download ] 
    before_action :authenticate_user! 

    def show 
    end 

    def new 
    if @resume = current_user.resume 
     redirect_to @resume 
    else 
     @resume = Resume.new 
    end 
    end 

    def create 
    @resume = current_user.build_resume(resume_params) 
    if @resume.save 
     redirect_to @resume 
    else 
     render :new 
    end 
    end 

    def edit 
    end 

    def update 
    if @resume.update resume_params 
     redirect_to @resume, notice: "Your resume was successfully saved!" 
    else 
     render 'edit' 
    end 
    end 

    def destroy 
    @resume.destroy 
    redirect_to new_resume_path, notice: "Your resume was successfully deleted!" 
    end 

    def download 
    send_data @resume, type: "application/pdf", disposition: "attachment" 
    end 

    private 

    def resume_params 
    params.require(:resume).permit(:user_id, :download_file, :remove_download_file) 
    end 

    def find_resume 
    @resume = Resume.find(params[:id]) 
    end 

    def catch_not_found 
    yield 
    rescue ActiveRecord::RecordNotFound 
    redirect_to(root_url, :notice => 'Record not found') 
    end 

end 

CV/show.html.erb

... 
... 
<%= link_to "Download", download_resume_path(@resume), "data-turbolinks" => false %> 

welcomes_controller.rb

class WelcomesController < ApplicationController 

    def index 
    end 

end 

Répondre

1

vous pouvez accéder modèle CV du contrôleur de bienvenue, bien que le contrôleur est le bienvenu, vous pouvez appeler le modèle de CV voir exemple ci-dessous

class WelcomesController < ApplicationController 

    def index 
    # you can call Resume model frome here 
    @resumes = Resume.all 
    end 

    def show 
    @resume = Resume.find(params[:id]) 
    end 

end