Ruby on rails 如何使用RubyonRails将字符串作为数组存储在数据库列中
这个问题被问了很多次。主要的问题是没有任何东西适合我的情况 情况是,我无法将类型化内容作为数组存储在数据库列中 代码为的文本\u字段:Ruby on rails 如何使用RubyonRails将字符串作为数组存储在数据库列中,ruby-on-rails,arrays,ruby,ruby-on-rails-5.1,Ruby On Rails,Arrays,Ruby,Ruby On Rails 5.1,这个问题被问了很多次。主要的问题是没有任何东西适合我的情况 情况是,我无法将类型化内容作为数组存储在数据库列中 代码为的文本\u字段: = text_field_tag 'product[keywords][]', @product.keywords, class: 'tab-input product_keywords' params.require(:product).permit(:id, :name, :keywords => []) serialize :keywords,
= text_field_tag 'product[keywords][]', @product.keywords, class: 'tab-input
product_keywords'
params.require(:product).permit(:id, :name, :keywords => [])
serialize :keywords, Array
class AddKeywordsToProducts < ActiveRecord::Migration[5.1]
def change
add_column :products, :keywords, :text
end
end
控制器中的strong参数为:
= text_field_tag 'product[keywords][]', @product.keywords, class: 'tab-input
product_keywords'
params.require(:product).permit(:id, :name, :keywords => [])
serialize :keywords, Array
class AddKeywordsToProducts < ActiveRecord::Migration[5.1]
def change
add_column :products, :keywords, :text
end
end
Jquery代码,当键入错误的值时,在删除时不会删除值,但会在每个元素后添加逗号,因为我希望在一列中使用逗号分隔的值。
$(document).on 'keyup', '.product_keywords', ->
keyword = @value.replace(/(\w)[\s,]+(\w?)/g, '$1, $2')
if keyword != @value
@value = keyword
return
型号代码:
= text_field_tag 'product[keywords][]', @product.keywords, class: 'tab-input
product_keywords'
params.require(:product).permit(:id, :name, :keywords => [])
serialize :keywords, Array
class AddKeywordsToProducts < ActiveRecord::Migration[5.1]
def change
add_column :products, :keywords, :text
end
end
迁移代码:
= text_field_tag 'product[keywords][]', @product.keywords, class: 'tab-input
product_keywords'
params.require(:product).permit(:id, :name, :keywords => [])
serialize :keywords, Array
class AddKeywordsToProducts < ActiveRecord::Migration[5.1]
def change
add_column :products, :keywords, :text
end
end
现在我想将它存储为列中的数组,但它没有正确存储。
它存储为:
["abc, dbx, she"]
还有,有谁能告诉我处理这些案件的最佳案例吗?
加上使用ruby处理此类情况的最佳实践,所以我将在将来学习它?您可能需要一个自定义序列化程序,如图所示。因此,不是:
serialize :keywords, Array
您可能会这样做:
serialize :keywords, KeywordSerializer
在助手中的某个地方
:
class KeywordSerializer
def self.dump(what)
what.join(", ")
end
def self.load(what)
what.split(/\s*,\s*/)
end
end
使用单个表单标记传递数组元素不可能作为数组传递,也不可能作为字符串传递数组,您需要在白色列表附近处理它
permitted_params = params.require(:product).permit(:id, :name, :keywords => [])
permitted_params[:keywords] = permitted_params[:keywords][0].split(/\s*,\s*/)
我现在是否应该在每个关键字末尾添加自定义逗号的情况下获取关键字?这取决于您和
dump
和load
的理想实现;我刚刚展示了一般收据。这是一个非常好的收据,但是我在load
方法中得到了零,为什么?@ray我不知道。@这里是ray。您可以使用str.split(/\s*,\s*/)拆分字符串并将其用作数组
这将删除前导空格和无效空格also@ray在什么阶段我需要这样做请?检查答案张贴,是否工作