我有一张表格,我正在使用一系列极好的问题创建。而不是硬编码所有这些在HTML中。
我计划将它们存储在一个名为questions
的表中,并通过在表格中循环来填充问卷视图,该脚本可以从一列中提取问题的文本及其相应的参数从另一个。
答案将存储在Questionnaire
模型和表格中。这似乎相对直截了当,除非处理强对手。
所以我有模型Question
和表questions
。其中包含列the_questions
和the_parameters
。
该表中包含的问题对应于模型Questionnaire
的字段。我想查询数据库以获取参数数组,然后将它们放入问卷控制器中的强参数中。
所以而不是:
def questionnaire_params
params.require(:questionnaire).permit(:an, :enormous, :list, :of, :params.....)
end
我想做类似的事情:
def questionnaire_params
@my_params=Questions.the_parameters
params.require(:questionnaire).permit(@my_params)
end
有没有办法做到这一点?我是否想出这个想法?任何指导或警告将不胜感激。
答案 0 :(得分:3)
我想查询数据库以获取参数数组 然后将它们放入调查问卷中的强力参数中 控制器。
这意味着,您将允许所有和每个属性被分配。
为此,您只需使用permit!
方法,该方法会将 模型的所有
params.require(:questionnaire).permit! # I don't want to even start discussing downsides of whitelisting all attributes
如果你有一些属性,你不想允许大规模分配并仍想使用数组,你可以定义
def questionnaire_params
@all_attributes = Model.column_names.map(&:to_sym)
@not_permitted = [:id, :some_other_attribute]
params.require(:questionnaire).permit(@all_attributes - @not_permitted)
end
答案 1 :(得分:2)
您可能想重新考虑如何为应用程序建模。通常当你需要操纵强烈的params时,它表示代码气味。
问题和答案以及问卷如何相关?作为替代方案,请考虑这种建模:
您可以通过答案回答问题。您的调查问卷的强大参数将是
params.require(:questionnaire).permit(
answers_attributes: [:id, :question_id, :text]
)
答案 2 :(得分:1)
我尝试了类似的东西(不确定我的问题是否正确)
params.require(:parent).permit(ModelName.column_names)
但是你正在击败强大的障碍的目的。
尝试
params.require(:parent).permit(Parent.column_names - blacklist_array )
,如
params.require(:parent).permit(Parent.column_names - [:tax_num , :age])
答案 3 :(得分:1)
params.require(:questionnaire).permit(Questionaire.column_names.map(&:to_sym))
检查这是否适合您。
答案 4 :(得分:0)
.
采用数组:
.
因此,您只需将ActionController::Parameters
数组作为数组传递到$ bin/rails c
> params = ActionController::Parameters.new(user: {name: 'John', age: 22})
=> {"user"=>{"name"=>"John", "age"=>22}}
> permitted = params.require(:user).permit(:name, :age)
=> {"name"=>"John", "age"=>22}
> permitted = params.require(:user).permit([:name, :age])
=> {"name"=>"John", "age"=>22}
> permitted = params.require(:user).permit(*[:name, :age])
=> {"name"=>"John", "age"=>22}
> permitted = params.require(:user).permit('name', 'age')
=> {"name"=>"John", "age"=>22}
。
答案 5 :(得分:0)
您不需要大量不同的参数来做一些简单的调查问卷。你做错了。而且你不想在数据库中填写一个参数白名单。在软件版本控制方面,它会很慢并引起一些真正的麻烦。
调查问卷的一个相当标准的设计是这样的:
<%= form_for(:questions, controller: 'questions', action: 'create') do |form| %>
<% @questions.each do |question| %>
<fieldset>
<%= fields_for(question) do |qf| %>
<legend><%= question.title %></legend>
<%= qf.collection_check_boxes :answer_ids, question.answers, :id, :text %>
<% end %>
</fieldset>
<% end %>
<% end %>
参数:
params.require(:questions).allow(question: [:answer_ids])