0

管理者向けの一括割り当てエラーとattr_accessibleの処理方法を説明するrailscastsチュートリアルに従おうとしていましたが、それは少し時代遅れだったので、ここで3.2.6のrailsAPIドックにあるものに従おうとしています。

私がやりたいのは、管理者ユーザーが更新アクションで提案モデルの「勝ち」属性にアクセスできるようにすることだけです。

これが現在のattr_accessibleを示す私の提案モデルです。

class Proposal < ActiveRecord::Base
attr_accessible :email, :email_confirmation, :link, :name, :references, :short_description

belongs_to :idea

これが、プロポーザルコントローラーの更新アクションのコードです。

class ProposalsController < ApplicationController

include ActiveModel::MassAssignmentSecurity
attr_accessible :email, :email_confirmation, :link, :name, :references, :short_description
attr_accessible :email, :email_confirmation, :link, :name, :references, :short_description, :winning, :as => :admin

def update
    @idea = Idea.find(params[:idea_id])
    @proposal = @idea.proposals.find(params[:id])

    if @proposal.update_attributes(proposal_params)
        redirect_to idea_proposals_url(@idea)
    else
        render 'edit'
    end
end

protected

    def proposal_params
        role = current_user.admin ? :admin : :default
        sanitize_for_mass_assignment(params[:proposal], role)
    end
4

1 に答える 1

0

このRailscastをチェックしてください。Adminフィールドのブール値で同様の問題が発生し、curl投稿を送信してセキュリティを回避するユーザーを望まなかった。ユーザーが管理者の場合、フィールドにアクセスできるようになります。そうでない場合、一括割り当てによってフィールドが変更されないように保護されます。

http://railscasts.com/episodes/237-dynamic-attr-accessible?view=asciicast

于 2012-07-12T16:39:18.067 に答える