2017-02-16 11 views
0

私はユーザーにpaperclipを使用して写真をアップロードさせてもらいますが、写真には所有権がありません。つまり、写真を誰がアップロードしたのか分かりません。rails user_id画像に追加

ここでは、アップロードしたユーザーがあなたの写真をアップロードしたときに、その写真をアップロードしたいと思います。私はuser_id列を持っています。しかし、私はどのように画像コントローラのコードを実装するのか分からない

どうすればいいですか?ありがとう! @pics = User.find_by(USER_NAME:paramsは[:USER_NAME])

端:

class PicsController < ApplicationController 
before_action :find_pic, only: [:show, :edit, :update, :destroy] 

def index 
    @user = User.find(params[:user_id]) 
    @pics = Pic.all.order("created_at DESC") 

end 

def show 

end 

def new 
    @pic = Pic.new 
end 

def create 
    @pic.user = current_user 
    @pic = Pic.new(pic_params) 
    if @pic.save 
     redirect_to @pic, notice: "Yes it was posted" 
    else 
     render 'new' 
    end 
end 

def edit 
    @user = User.find(params[:user_id]) 
    @profile = @user.profile 
end 

def update 
    if @pic.update(pic_params) 
     redirect_to @pic, notice: "Congrates Pic was upaded" 
    else 
     render 'new' 
    end 
end 

def destroy 
    @pic.destroy 
    redirect_to users_path 
end 


private 

def pic_params 
    params.require(:pic).permit(:title, :description, :profile_id) 
end 

def find_pic 
    @pic = Pic.find(params[:id]) 
    end 

class UsersController < ApplicationController 
before_action :authenticate_user! 

def index 
    @pics = Pic.all.order("created_at DESC") 
end 

DEF @user = User.find([ID]のparams)を示します

エンド

class ProfilesController < ApplicationController 
before_action :authenticate_user! 
before_action :only_current_user 


def new 
    @user = User.find(params[:user_id]) 
    @profile = Profile.new 
end 

def create 
    @user = User.find(params[:user_id]) 
    @profile = @user.build_profile(profile_params) 
    if @profile.save 
     redirect_to user_path(params[:user_id]) 
    else 
     render action: :new 

    end 
end 

def edit 
    @user = User.find(params[:user_id]) 
    @profile = @user.profile 

end 

def update 
    @user = User.find(params[:user_id]) 
    @profile = @user.profile 
    if @profile.update_attributes(profile_params) 
     flash[:success] = "Profile Updated" 
     redirect_to user_path(params[:user_id]) 
    else 
     render action: :edit 
    end 
end 


private 

def profile_params 
    params.require(:profile).permit(:avatar, :user_name, :contact_email, :description) 
end 

def only_current_user 
    @user = User.find(params[:user_id]) 
    redirect_to(root_url) unless @user == current_user 
end 

エンド

+0

あなたのUserモデルとPicモデルを含めてください。あなたはデータベース内の2つのエンティティ間の関連付けをどのように作成しているのか分かります。 – JayJay

答えて

0

アップロードプロセス中にユーザーを特定できる場合は、アップロード時にのhidden_​​fieldにuser_id を渡すことができます。すでにuser_id列が作成されているとします。あなたのコントローラのアクションに@userを見つける必要が動作するように、このコードの

<%= f.hidden_field :user_id , value: @user.id %> 

。あなたの 'インデックス'アクションで既にやっているのと同じように:user_idによってユーザを見つける ユーザにdeviseを使用している場合は、代わりにcurrent_user.idを使用できます。