1

私が構築し始めているpostgresバックエンドを使用したRailsアプリの関連付けと、場合によってはデータ型についてのアドバイスを得ることができるかどうか疑問に思っています. ユーザーはエントリを作成できます。これは has_many :corrections を意味し、複数のユーザーがエントリの言語ミスを修正できます。

私にとって困難な部分は、エントリーのコンテンツが個別の文字列に分割され、それぞれが個別に修正されるという事実から生じます. たとえば、タイトル (文字列) "My Cat" とコンテンツ (テキスト列) "My cat's name is Felix. He has black hair" のエントリを作成するとします。それらのそれぞれについて個別に修正を提出すること。私の 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.」というエントリの各文字列に修正フォームができました。

これには次の問題があります(これは問題だと思います)

エントリが複数の修正を含むように設定しましたが、これは、それぞれが 1 つの修正を送信する多くの異なるユーザーによってエントリが修正される可能性があることを意図していました。ただし、たとえば、エントリのコンテンツ列に 10 個の文があり、別のユーザーが 10 個の文のそれぞれを修正した場合、そのユーザーは 10 個の個別の修正を行うことになります。

  1. たとえば、私の架空のエントリの 3 つの修正 (「私の猫」、「私の猫の名前は Felix」、「彼の髪は黒い」) を表の 1 つの修正行に提出し、エントリの各文はユーザーによる修正にリンクされているため、データベースから修正を取得すると、タイトル、その修正、最初の文とその修正、2 番目の文とその修正を表示できますか? 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 => {"彼は黒い髪をしています"=>"彼は黒い毛皮を持っています" , "私の猫の名前はフェリックスです"=>"私の猫の名前はフェリックスです"}

私があなたに言ったことに基づいて、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 に答える