Ruby on rails 是否使用hstore在数据库条目中创建数量可变的字段?
我想知道我是否能得到你关于我正在开始构建的带有postgres后端的Rails应用程序的关联和可能的数据类型的建议。一个用户可以创建一个条目,它有许多:更正,这意味着多个用户可以更正该条目中的语言错误 对我来说,最具挑战性的部分是因为条目的内容被分解成单独的字符串,每个字符串都将被单独更正。例如,假设我创建了一个条目,标题(是一个字符串)“我的猫”,内容(是文本列)“我的猫的名字是Felix,他有一头黑发”,然后我希望能够分别为每个条目提交更正。在我的corrections_controller.rb的新动作中,我做到了这一点Ruby on rails 是否使用hstore在数据库条目中创建数量可变的字段?,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我想知道我是否能得到你关于我正在开始构建的带有postgres后端的Rails应用程序的关联和可能的数据类型的建议。一个用户可以创建一个条目,它有许多:更正,这意味着多个用户可以更正该条目中的语言错误 对我来说,最具挑战性的部分是因为条目的内容被分解成单独的字符串,每个字符串都将被单独更正。例如,假设我创建了一个条目,标题(是一个字符串)“我的猫”,内容(是文本列)“我的猫的名字是Felix,他有一头黑发”,然后我希望能够分别为每个条目提交更正。在我的corrections_controller
def new
@entry = Entry.find(params[:entry_id])
@title = @entry.title
@content = @entry.content.split('.')
@correction = Correction.new
end
因此,在views/corrections/new.html.erb中,我这样做是为了为Entry.rb内容中的标题和每个字符串创建一个表单元素
<%= @title %>
<%= form_for [@entry, @correction], url: {action: "create"}, html: {class: "nifty_form"} do |f| %>
<%= label_tag(:content, "Content") %>
<%= f.text_area :content, size: "60x12" %>
<%= f.submit "Create" %>
<% end %>
<hr>
<% @content.each do |c| %>
<%= c %>
<%= form_for [@entry, @correction], url: {action: "create"}, html: {class: "nifty_form"} do |f| %>
<%= label_tag(:content, "Content") %>
<%= f.text_area :content, size: "60x12" %>
<%= f.submit "Create" %>
<% end %>
<% end %>
3) 如果您使用postgres hstore,您会将要更正的句子设置为键
,将要更正的句子设置为值
>> Correction.create( :data => { "My Cat's name is Felix" => "My cat's name is Felix", "He has black hair" => "He has black fur"})
最后的数据
修正载荷(1.0ms)选择“修正”。*从“修正”顺序中按“修正”。“id”描述限值1
=>{“他有黑色的头发”=>“他有黑色的毛皮”,“我的猫的名字叫费利克斯”=>“我的猫的名字叫费利克斯”}
根据我告诉你的,有没有更好的方法来使用Rails和postgres
请注意,在我用于灵感的应用程序中,尽管有多个表单字段对应于要更正的字符串,但一旦用户单击“提交”,它们都会立即提交。这也是我的目标
模型
Entry.rb (has a :title and a :content column)
has_many :corrections
Correction (has one column, :content, as well as :user_id and :entry_id)
belongs_to :entry
这听起来不像
hstore
在这里工作得特别好
既然要将内容拆分成句子,为什么不在数据库中反映出来呢?将内容存储在语句中
表格:
(sentence_id int4, entry_id int4, order int2, content text)
这也意味着您不需要对标题进行特殊处理,它只是一个顺序=0的句子
然后,每个更正都可以引用特定的句子,您不受每个用户更正数量的限制:
(correction_id int4, sentence_id int4, user_id int4, corrected_content text)
看起来简单多了。这听起来不像
hstore
在这里工作得特别好
既然要将内容拆分成句子,为什么不在数据库中反映出来呢?将内容存储在语句中
表格:
(sentence_id int4, entry_id int4, order int2, content text)
这也意味着您不需要对标题进行特殊处理,它只是一个顺序=0的句子
然后,每个更正都可以引用特定的句子,您不受每个用户更正数量的限制:
(correction_id int4, sentence_id int4, user_id int4, corrected_content text)
看起来简单多了