現在のユーザーがレコードを編集する権限を持っているかどうかを確認するシステムを作成しようとしています。私はそれを行う方法は、表示されたレコードのリンクされたIDと@user
= current_user
以外のリダイレクトされるプライベート関数に@userの変数を代入してインスタンス化することだと思いますが、これを行うと毎回リダイレクト動作が発生しますユーザーがレコードを所有している場合)。ここで Railsのリンクテーブルフィールドに基づいてインスタンス変数を割り当てます。
def edit
@deal = Deal.find(params[:id])
@user = User.where(params[:id] === @deal.user_id)
correct_user
end
...
private
def correct_user
unless @user === current_user
redirect_to root_path
flash[:error] = 'You can only edit deals that you own'
end
end
ユーザーとの契約モデルは多くを持って関連しているコントローラの設定で、
class User < ApplicationRecord
has_many :deals
...
class Deal < ApplicationRecord
belongs_to :user
とお得な情報のスキーマ(ユーザIDがuser_id
に作成時に割り当てられている)を所有しています
create_table "deals", force: :cascade do |t|
t.text "headline"
t.string "matter"
t.text "summary"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["user_id"], name: "index_deals_on_user_id"
end
プロジェクトはDeviseでセットアップされているため、これらのヘルパーはまた利用可能です。あなただけcurrent_user
@user == current_user
で@user
を比較したい
これはありがとうございます! – oneWorkingHeadphone