这是通过控制器进行质量分配的安全方法吗?

时间:2012-06-28 18:26:14

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.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_idquestion的任何其他列吗?除了使用attr_accessible之外,他们是更好的方法吗?

3 个答案:

答案 0 :(得分:2)

好的,你可以做点什么......

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

这会从params [:question]哈希中删除所有未在启用的数组中的属性。

答案 1 :(得分:2)

@question.title, @question.description = 
  params[:question].values_at(:title, :description)

答案 2 :(得分:1)

使用Ruby 1.9,您可以使用select方法略微简化iwiznia的解决方案。

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