1

アプリで 2 人のユーザー間でプライベート メッセージング機能を作成しようとしていますが、ここで問題が発生しています

まず、これが Schema.rb です。

create_table "conversations", :force => true do |t|
    t.string   "conversation_subject
end

create_table "messages", :force => true do |t|
    t.string   "content"
    t.integer  "user_id"
    t.integer  "conversation_id"
end

create_table "participants", :force => true do |t|
    t.integer  "conversation_id"
    t.integer  "user_id"
end

conversations has_many :messages, :participants
        users has_many :messages, :participants

会話を開始するためのフォーム:

<%= form_for @conversation do |f| %>

    <div class="field">
    <strong>Subject</strong><br />
    <%= f.text_field :conversation_subject %>

    </div>
    <div class="actions">
<%= f.submit "Submit" %>
    </div>
 <% end %>

上記のフォームで、私は

<%=f.text_area :content %> 

メッセージ用にもワンクリックで会話とメッセージを作成しますが、ここでは user_id のためにネストされた属性を使用できませんでした (できるかもしれませ
んが、私の理解ではできません)

  1. ネストされた属性を使用せずに、1 つのフォームで 2 つの異なるモデルの属性を処理する方法はありますか?

user_idを Message から取り出して、理論的にはまだ機能するメッセージング システムを使用できることはわかっていますが、各メッセージを送信者に関連付けるには、それを含める必要があると考えました。

  1. 私が考えることができる唯一の回避策は、会話が初めて作成されたときに add_content_to_conversation も Message に渡すことです。これが、このデータベース設計で考えられるすべてです。これは本質的に欠陥がありますか?

どんな助けでも素晴らしいでしょう。レール初心者です。

ありがとう

4

1 に答える 1

0

(長い一日) ついて行くのに苦労していますが、これは役に立ちますか?

メッセージ

belongs_to :recipient, :classname => 'User'
belongs_to :sender, :classname => 'User'

create_table "messages", :force => true do |t|
    t.string   "content"
    t.integer  "recipient_id"
    t.integer  "sender_id"
    t.integer  "conversation_id"
end
于 2012-04-19T02:09:48.770 に答える