Rails 4 -如何从多个模型创建对象



这是我的第一个问题,所以如果有什么不清楚的地方请随时提问,我会马上回答:

我正在Rails 4项目上工作-我希望能够从一个用户向另一个用户发送自定义消息。

我有3个模型应该适用于这个问题:User, Track(关于音乐轨道的元信息),TrackMessage.

模型TrackMessage有4个字段:id, track_id, sender_id, recipient_id。

我希望能够使用track_id和sender_id来创建一个包含track_id引用的跟踪对象和sender_id引用的用户对象的单个对象。

理想情况下,在show.html.erb中,我希望能够调用:

<% @myMessages.each do | m | %>
     <p> <%= m.track.url %> </p>
     <p> <%= m.track.name %> </p>
     <p> <%= m.user.username %> </p>
     <p> <%= m.track.url %> </p>
<% end %>

在User控制器中我有:

def show
   # fetch all of the messages that were sent to the current user
   @trackMessages = TrackMessage.where(:recipient_id => current_user.id)
   @myMessages = [ ]
   *stuck on what happens next:
end
我非常喜欢社区在这方面的帮助。非常感谢您的宝贵时间!

我会这样设置。

在控制器

def show
  @track_messages = TrackMessage.includes(:track, :sender).where(:recipient_id => current_user.id)
end

TrackMessage模型
Class TrackMessage
  belongs_to :sender, class_name: 'User'
  belongs_to :recipient, class_name: 'User'
  belongs_to :track
  delegate :name, to: :track, prefix: true
  delegate :url, to: :track, prefix: true
  delegate :username, to: :sender, prefix: true
end

那么在你的视图中,你应该能够执行

<% @track_messages.each do | m | %>    
  <p> <%= m.track_url %> </p>
  <p> <%= m.track_name %> </p>
  <p> <%= m.sender_username %> </p>    
<% end %>

最新更新