Tôi là người mới bắt đầu trong đường ray và gặp khó khăn trong việc tìm kiếm một cách phù hợp với vấn đề của tôi.Đôi thuộc tính has_many
Tôi có ba mô hình: Đối thoại, người tham gia, các thông điệp đó có các thuộc tính sau:
thoại:
module Messenger
class Conversation <ActiveRecord::Base
has_many :participants, :class_name => 'Messenger::Participant'
def messages
self.participants.messages.order(:created_at)
end
end
end
tham gia:
module Messenger
class Participant <ActiveRecord::Base
has_many :messages, :class_name => 'Messenger::Message'
belongs_to :conversation, :class_name => 'Messenger::Conversation'
end
end
nhắn:
module Messenger
class Message <ActiveRecord::Base
default_scope {order(:created_at)}
default_scope {where(deleted: false)}
belongs_to :participant, :class_name => 'Messenger::Participant'
end
end
Vấn đề của tôi là tôi đang cố tạo một biểu mẫu duy nhất để tạo một cuộc hội thoại với một thông điệp đầu tiên trong đó. Biểu mẫu có dạng như sau:
= form_for @conversation, url: messenger.conversations_create_path do |f|
.row
.col-md-12.no-padding
.whitebg.padding15
.form-group.user-info-block.required
= f.label :title, t('trad'), class: 'control-label'
= f.text_field :title, class: 'form-control'
.form-group.user-info-block.required
= f.label :model, t('trad'), class: 'control-label'
= f.text_field :model, class: 'form-control'
.form-group.user-info-block.required
= f.label :model_id, t('trad'), class: 'control-label'
= f.text_field :model_id, class: 'form-control'
= fields_for @message, @conversation.participants.message do |m|
= m.label :content, t('trad'), class: 'control-label'
= m.text_area :content, class:'form-control'
.user-info-block.action-buttons
= f.submit t('trad'), :class => 'btn btn-primary pull-right'
Tôi đã thử nhiều cách để làm cho biểu mẫu này đơn giản nhưng tôi đã gặp phải một số sự cố mà tôi không biết cách khắc phục bằng cách sử dụng đúng cách.
Tôi đã thử sử dụng Field_for
để bao gồm thư trong biểu mẫu cuộc trò chuyện, nhưng vì tôi không có gì được lưu trong cơ sở dữ liệu của mình, có vẻ như tôi không thể liên kết thư với người tham gia chưa có. Vì vậy, về cơ bản tôi muốn biểu mẫu đầu tiên của mình, khi được xác thực, để tạo cuộc trò chuyện, liên kết người dùng hiện tại với cuộc trò chuyện đó và liên kết thông báo với người dùng đầu tiên đó, nhưng tôi cho rằng có nhiều cách để làm điều đó với khung công tác và không muốn làm điều đó theo cách thủ công.
Cách thích hợp để làm theo để đạt được điều đó là gì? Tôi thậm chí trên đường đua tốt hay shoould tôi thay đổi một cái gì đó hoặc thêm một cái gì đó?
Chỉnh sửa: để làm cho người dùng dễ hiểu hơn, người tham gia có user_id và cuộc trò chuyện_id, có nghĩa đây là bảng quan hệ. Tôi không thể thích nghi với các thuộc tính của các mô hình của tôi để làm cho nó dễ dàng hơn vì tôi phải giữ nó theo cách đó vì lý do bảo mật.
bạn có thể muốn xem xét has_many thông qua hiệp hội cho các tin nhắn trong Đối thoại thay vì phương pháp cán tay của bạn. – engineerDave