1

我想知道是否可以就我开始构建的带有 postgres 后端的 Rails 应用程序的关联和可能的数据类型获得您的建议。一个用户可以创建一个条目,其中 has_many :corrections 意味着多个用户可以更正该条目的语言错误。

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

    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”的每个字符串。

这有以下问题(我认为这是一个问题)

尽管我将其设置为条目具有多个:更正,但其目的是让许多不同的用户更正条目,每个用户都将提交一个更正。但是,事实证明,例如,如果一个条目在内容列中有十个句子,而另一个用户更正了这 10 个句子中的每一个,那么该用户将有 10 个单独的更正。

  1. 有没有推荐的方法可以提交,例如,我假设的条目的三个更正(“我的猫”、“我的猫的名字是菲利克斯”、“他的头发是黑色的”)到表格的一个更正行中,保持条目的每个句子都与用户的更正相关联,这样当我从数据库中检索我的更正时,我可以显示标题、更正、带有更正的第一句和带有更正的第二句?我在想 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" , "我的猫叫菲利克斯"=>"我的猫叫菲利克斯"}

根据我告诉你的内容,有没有更好的方法来使用 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
4

1 回答 1

1

听起来hstore在这里不会特别好用。

既然您将内容分成句子,为什么不在数据库中反映呢?将内容存储在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)

看起来简单了很多。

于 2013-08-07T04:46:54.867 回答