2013-08-06 126 views
1

我想知道如果我可以得到你的建議,關於一個Rails應用程序的關聯和可能的數據類型,我開始構建一個postgres後端。用戶可以創建一個條目,has_many:更正意味着多個用戶可以更正條目以避免語言錯誤。使用hstore在數據庫條目中創建可變數量的字段?

對於我而言,具有挑戰性的部分源於Entry的內容被分解爲單獨的字符串,其中每個字符串都會單獨更正。例如,假設我創建了一個包含標題(這是一個字符串)「我的貓」和內容(這是文本列)的條目「我的貓的名字是菲利克斯,他有黑色的頭髮」,那麼我希望能夠爲每個人單獨提交更正。在我corrections_controller.rb的新動作,我這樣做

def new 

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

    end 

所以在views /改正/ 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「我的貓」和條目的每根弦的修正表「我的貓的名字是費利克斯」和「他有黑色的頭髮。」

這有以下問題(我認爲這是一個問題)

雖然我設定,讓一個條目的has_many:更正,原打算是一個條目可能由許多不同的用戶進行修正各其中將提交一次更正。然而,結果是,例如,如果一個條目在內容列中有十個句子,並且另一個用戶修正了這10個句子中的每一個,那麼該用戶將有10個單獨的更正。

  1. 有沒有辦法,我可以提交,例如推薦的方式,三個改正我的假設條目(「我的貓」,「我的貓的名字是費利克斯」,「他的頭髮是黑色的」)爲一在表中修正行,保持Entry的每個句子與用戶的修正相關聯,以便當我從數據庫中檢索到我的修正時,我可以顯示標題,修正,第一句修正,第二句修改它的修正?我認爲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。數據 校正負載(1.0ms)SELECT「校正」* FROM「校正」ORDER BY「校正」「ID」DESC極限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 

回答

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) 

似乎簡單了很多。

+0

謝謝,我會試試看,並回復給你。 – Leahcim

相關問題