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 回答