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

时间:2014-07-02 15:26:58

标签: ruby-on-rails model-view-controller ruby-on-rails-4 messaging

这是我的第一个问题所以请随时询问是否有问题,我会立即回复:

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

我有3个模型应该适用于这个问题:用户,跟踪(关于音乐曲目的元信息),TrackMessage。

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

我希望能够使用track_id和sender_id创建一个包含track_id引用的track对象的对象,以及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 %>
用户控制器中的

我有:

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

我非常希望社区对此有所帮助。非常感谢你的时间!

1 个答案:

答案 0 :(得分:0)

我会这样设置它。

在您的控制器中

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 %>