gpt4 book ai didi

ruby-on-rails - 使用 hstore 在数据库条目中创建可变数量的字段?

转载 作者:行者123 更新时间:2023-11-29 13:33:43 27 4
gpt4 key购买 nike

我想知道我是否可以得到你关于关联和可能的数据类型的建议,我正在开始构建一个带有 postgres 后端的 Rails 应用程序。一个用户可以创建一个 Entry,它有_many :corrections 意味着多个用户可以纠正 Entry 的语言错误。

对我来说具有挑战性的部分是条目的内容被分解成单独的字符串,每个字符串都将被单独更正。例如,假设我创建了一个标题(字符串)“我的猫”和内容(文本列)“我的猫的名字是 Felix。他有黑头发”的条目,那么我希望能够为每个人单独提交更正。在我的 corrections_controller.rb 的新 Action 中,我这样做了

    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 %>

现在,我在 Entry.title“My Cat”下方有一个更正表格,对于条目“My cat's name is Felix”和“He has black hair”的每个字符串。

这个有下面的问题(我觉得是有问题的)

虽然我将它设置为一个条目有_many :corrections,但这是为了让一个条目可以被许多不同的用户更正,每个用户都会提交一个更正。然而,结果是,例如,如果一个条目的内容栏中有十个句子,而另一个用户更正了这 10 个句子中的每一个,那么该用户将有 10 个单独的更正。

  1. 是否有推荐的方式可以提交,例如,我的假设条目的三个更正(“我的猫”、“我的猫的名字是 Felix”、“他的头发是黑色的”)合并为一个更正表中的行,将条目的每个句子都链接到用户的更正,这样当我从数据库中检索我的更正时,我可以显示标题、更正、第一句及其更正和第二句及其更正更正?我在想 hstore 可能是处理这个问题的方法,但我不确定如何去做。

  2. 根据您对问题 #1 的回答,您会将 corrections_controller.rb 中的 Entry 拆分为单独的实例变量还是做其他事情?

        def new 
    @entry = Entry.find(params[:entry_id])
    @title = @entry.title
    @content = @entry.content.split('.')
    @correction = Correction.new

    end

3) 如果你会使用 postgres hstore,你会把要更正的句子设置为 key 并将更正后的句子设置为 value

>> Correction.create( :data => { "My Cat's name is Felix" => "My cat's name is Felix", "He has black hair" => "He has black fur"})

Correction.last.data Correction Load (1.0ms) SELECT "corrections".* FROM "corrections" ORDER BY "corrections"."id" DESC LIMIT 1 => {"He has black hair"=>"He has black fur", "My Cat's name is Felix"=>"My cat's name is Felix"}

根据我告诉你的,有没有更好的方法使用 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 在这里工作得不是特别好。

既然您要将内容拆分成句子,为什么不将其反射(reflect)在数据库中呢?将内容存储在一个sentence表中:

(sentence_id int4, entry_id int4, order int2, content text)

这也意味着您不需要对标题进行特殊处理,它只是一个带有order == 0 的句子。

然后每个更正都可以引用一个特定的句子,并且您不受每个用户拥有多少个更正的限制:

(correction_id int4, sentence_id int4, user_id int4, corrected_content text)

看起来简单多了。

关于ruby-on-rails - 使用 hstore 在数据库条目中创建可变数量的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18085531/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com