出于安全原因,我决定采用不同的方法进行批量分配,并想知道这是否是在控制器内部进行此操作的安全方法?
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
之外,他们是更好的方法吗?
答案 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)})