在阅读了这里的许多线程以及各种书籍/web资源之后,我仍然不知道如何正确设置参数键,以便它在一个表单上接受多个值。
strong\u参数的自述文件似乎表明这是可能的,它将params散列中的项声明为空数组,如下所示
params.permit(:id => [])
。
但是,当我以这种方式设置参数哈希时,它仍然只能返回表单中设置的键的最后一个值,而不是用户提交的所有值的数组。
我还注意到param键显示为字符串,而不是数组。跑步
params[:document][:key].class
返回字符串而不是数组。还有,当我尝试包括
"name=key[]"
表单的text\u字段中的选项,它抱怨“key[]”的未定义方法“merge”:String。
知道我哪里出错了吗?我承认一些控制器代码可能有点粗糙,但在这一点上,我只是想让params散列返回一个k/v对数组。提前感谢您的帮助!
documents\u控制器。rb型
before_action :get_key_array, only: [:create, :update]
before_action :get_value_array, only: [:create, :update]
before_action :combine_key_array_and_value_array_to_create_jsonb_object, only: [:create, :update]
before_action :save_jsonb_object_to_user_defined_attributes_field, only: [:create, :update]
...
private
params.require(:document).permit(:key => [], :value => [])
# FIXME: Update to use push << ?
def get_key_array
unless params[:document].nil?
@key_array = [params[:document][:key]]
# @key_array << params[:document][:key]
end
end
def get_value_array
unless params[:document].nil?
@value_array = [params[:document][:value]]
# @value_array << params[:document][:value]
end
end
def combine_key_array_and_value_array_to_create_jsonb_object
unless @document.nil? || @key_array.nil? || @value_array.nil?
@jsonb_object = jsonb_object(@key_array, @value_array)
end
end
def save_jsonb_object_to_user_defined_attributes_field
params[:document][:user_defined_attributes] = @jsonb_object
end
_表格。html。雇员再培训局
<%= form_for @document do |document_form| %>
<%= document_form.label :key %>
<%= document_form.text_field :key %>
<%= document_form.label :value %>
<%= document_form.text_field :value %>
<%= document_form.label :key %>
<%= document_form.text_field :key %>
<%= document_form.label :value %>
<%= document_form.text_field :value %>
<% end %>
输入测试数据(如Key1、Value1、Key2、Value2)后,params散列表示只有第二组输入值被添加到params散列中
Parameters: { ..., "document"=>{"key"=>"key2", "value"=>"value2"}, "commit"=>"Create Document"}
更新:如果重要的话,:key和:value数组本身不是文档模型的一部分。我用过
attr_accessor :key, :value
为数组值提供一个“临时”home,以便在表单和参数哈希中使用,目的是将其值传输到user\u defined\u attributes字段,该字段
是
文档模型的一部分。把这个扔出去,以防万一这是问题的一部分。