2016-03-30 51 views
0

我正在爲每個用戶分配個人配置文件的用戶構建一個活動應用程序。我爲該網站設置了一些用戶,但是當我嘗試爲每個用戶創建和/或編輯配置文件時,它會將我引回到閃存郵件「該配置文件不屬於您!」這是參考我的第一個用戶配置文件,它已經建立並且工作正常。Ruby on Rails - 無法爲每個用戶創建新的配置文件

我正在使用Devise gem進行初始設置,但已經從我們自己的用戶控制器中構建出來。這裏是從該控制器的代碼 -

class UsersController < ApplicationController 
    before_action :authenticate_user! 
    before_action :set_user 
    before_action :owned_profile, only: [:edit, :update] 

    def new 
    @user = User.new 
    end 

    def show 
    @user = User.find(params[:id]) 
    end 

    def create 
    end 

    def edit 
    @user = current_user #User.find_by(params[:id]) 
    end 

    def update 
    @user = User.find_by(params[:id]) 
    if @user.update(user_params) 
     redirect_to user_path, notice: "Profile successfully updated!" 
    else 
     render 'edit' 
    end 
    end 

    private 

    def user_params 
    params.require(:user). 
     permit(:name, :username, :biography, :email, :url) 
    end 

    def owned_profile 
    unless current_user == @user 
     flash[:alert] = "That profile doesn't belong to you!" 
     redirect_to root_path 
    end 
    end 

    def set_user 
    @user = User.find_by(params[:id]) 
    end 
end 

任何援助,將不勝感激。

回答

0

如果問題是Users不能編輯自己的個人資料,那麼我相信它是由set_user內使用find_by造成的:

@user = User.find_by(params[:id]) 

應該是:

@user = User.find(params[:id]) 

如果你真的想用find_by,你可以這樣做:

@user = User.find_by_id(params[:id]) 

@user = User.find_by(id: params[:id]) 

Find_by用作如果User未找到2個以上示例將不會引發錯誤,而find會。

旁註:您可以在show動作中刪除@user分配。

0

我會創建一個管理員。一個簡單的方法是將一列添加到名爲admin的用戶表中,並將其設置爲布爾值。遷移數據庫。

然後在運行owned_profile方法之前檢查用戶是否是管理員。在該方法中,更改:unless current_user == @user

unless current_user == @user || current_user.admin 

然後設置自己作爲控制檯管理員,保存,然後隨意添加配置文件而不該回調運行。

+0

非常感謝您的回答,但我不確定這是否解決了最初的問題,但對於每個用戶,我都希望他們編輯他們自己的配置文件。目前它一直在踢回閃光消息。 –

+0

它解決了它。他們仍然可以編輯個人資料,你也可以。 – toddmetheny

+0

如果我不想將自己設置爲該網站的管理員,該怎麼辦? –

0

你可以這樣做。

當用戶註冊時,會自動創建配置文件。用戶和配置文件表的這個ID的好處將是相同的。

rails g model profile first_name last_name email 

rails g migration add_user_id_to_profiles user_id:integer 

Profile.rb

belongs_to :user 

User.rb

has_one :profile, dependent: :destroy 

before_create :set_profile 
def set_profile 
    build_profile(id: self.id, user_id: self.id, email: self.email) 
end 

好運。