1

セキュリティ上の理由から、一括割り当てに別のアプローチを取ることにしましたが、これがコントローラー内で安全に行う方法であるかどうかを知りたいですか?

QuestionsController

def new
  @survey = Survey.find(params[:survey_id])
  @question = Question.new
end

def create
  @survey = Survey.find(params[:survey_id])
  @question = @survey.questions.new
  @question.title = params[:question][:title]
  @question.description = params[:question][:description]


  if @question.save
    redirect_to new_survey_question_path
  else
    render :new
  end
end

survey_idまたは他の列を変更できますquestionか? を使用する以外に、彼らのより良いアプローチはありattr_accessibleますか?

4

3 に答える 3

2

わかりました、あなたは次のようなことをすることができます。

enabled_attributes = [:title, :description]
params[:question].delete_if {|k, v| !enabled_attributes.include?(k) }
@question = @survey.questions.new(params[:question])

これにより、params [:question]ハッシュから、有効な配列にないすべての属性が削除されます。

于 2012-06-28T18:48:45.580 に答える
2
@question.title, @question.description = 
  params[:question].values_at(:title, :description)
于 2012-06-28T19:09:19.150 に答える
1

Ruby 1.9 では、select メソッドを使用して iwiznia のソリューションを少し単純化できます。

enabled_attributes = [:title, :description] 
@question = @survey.questions.new(params[:question].
              select {|k, v| enabled_attributes.include?(k)}) 
于 2012-06-28T19:20:16.620 に答える