【问题标题】:rails user_id add to a picturerails user_id 添加到图片
【发布时间】:2017-07-06 02:46:01
【问题描述】:

我让用户使用回形针上传照片,但照片没有所有权。也就是说,我根本不知道是谁上传的照片。

在这里,我想当有人上传一张图片时,你知道是哪个用户上传的。我有一个 user_id 列。但我不知道如何在 pic 控制器中实现代码

我该怎么做?谢谢!

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

默认显示 @user = User.find(params[:id]) @pics = User.find_by(user_name: params[:user_name]) 结束

结束

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

结束

【问题讨论】:

  • 能否请您提供您的 User 和 Pic 模型 - 以便我了解您是如何在数据库中的两个实体之间创建关联的。

标签: ruby-on-rails associations


【解决方案1】:

如果在上传过程中可以识别出用户,可以尝试在上传过程中将user_id放在一个hidden_​​field中。您说您已经创建了 user_id 列。

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

要使此代码正常工作,您需要在控制器操作中找到 @user。类似于您在“索引”操作中已经在做的事情:通过 :user_id 查找用户 如果您使用devise 作为用户,您可以使用current_user.id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多