2016-03-30 15 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が見つからない場合、または

上記2例として使用
@user = User.find_by(id: params[:id]) 

Find_byfindれるが、エラーをスローしないであろう。

サイドノート:表示操作内で@user割り当てを削除できます。

0

私は管理者を作成します。これを行う簡単な方法は、adminという名前のユーザーテーブルに列を追加してブール値にすることです。 dbを移行します。

次に、owned_profileメソッドを実行する前に、ユーザーが管理者かどうかを確認します。その方法では、変更:

unless current_user == @user || current_user.admin 

からunless current_user == @user次に、コンソールで管理者として自分自身を設定して保存し、自由にそのコールバック実行せずにプロファイルを追加します。

+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 

グッドラック。

関連する問題