0

这是我的第一个问题,所以请随时问,如果有什么不清楚,我会立即回复:Rails 4 - 如何从多个模型创建一个对象?

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

我有3个模型应该适用于这个问题:用户,轨道(关于音乐轨道的元信息),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 %> 

在用户控制我有:

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 

我绝对爱社会的帮助在这。非常感谢您的宝贵时间!

+0

你有什么问题?你想问如何定义TrackMessage模型以及如何使用轨道和用户实例创建TrackMessage记录? – nickcen

+0

嘿尼克森 - 谢谢你的回应。你明白了,Baloo帮我解决了这个问题。保重! – user3798322

回答

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

非常感谢你的快速反应 - 我今天回家后会试试看,并告诉你!再次 - 非常感谢。 – user3798322

+0

这工作就像一个魅力!我想知道我是否可以用一小时的时间来了解它的工作原理。我对stackoverflow是新手,不知道规则是什么,但是你真的帮助我,我很想了解更多关于语法和原则的知识。请通过[email protected]与我们联系 – user3798322

相关问题