[英]How do I build a data structure in rails so that I can iterate through it like this
I'm struggling to try and figure out how to build a data structure in ruby. 我正在努力尝试找出如何在ruby中构建数据结构。
In my view I wish to iterate through it like this 在我看来,我希望这样迭代
<% @conversations.each do |conversation| %>
<%= "#{conversation.meta.subject} - #{conversation.meta.created_at} %>
<% conversation.messages.each do |message| %>
<%= message.name %>
<% end %>
<% end %>
Messages come from an active record query 消息来自活动记录查询
@messages = Message.find_by_name('john')
Meta is a hash like this 元是这样的哈希
@meta = { 'subject ' => 'John Messages', 'created_at' => '2012-12-28 10:20:55.230286' }
How do I turn this into the @conversations object I need? 如何将其转换为所需的@conversations对象?
I didn't test it. 我没有测试。 Try and post feedback. 尝试发布反馈。
class Conversation
attr_reader :name
class Meta
attr_accessor :subject, :created_at
def initialize(attributes = {})
attributes.each do |key, value|
send("#{key}=", value)
end
end
end
def initialize(name)
@name = name
messages # preload
end
def messages
@messages ||= Message.where(:name => name).order("created_at") # .find_by_name returns a single object, but you waiting for an Array, so use .where
end
def default_meta_attributes
{:subject => "#{name} Messages", :created_at => messages.last.created_at}
end
def meta(attrs={})
@meta ||= Meta.new(attrs.blank? ? default_meta_attributes : attrs)
end
end
# test
@conversations = []
@conversations << Conversation.new("John")
@conversations.each do |conversation|
puts conversation.meta.subject
puts conversation.meta.created_at
puts "Now conversation messages of #{conversation.name}"
conversation.messages.each do |message|
puts message.name
end
end
Conversation
- subject : string
has_many :messages
Message
- name : string
belongs_to :conversation
Change this line: 更改此行:
<%= "#{conversation.meta.subject} - #{conversation.meta.created_at} %>
to 至
<%= "#{conversation.subject} - #{conversation.created_at} %>
@conversations would probably come from a user's conversation, so make Conversation belong_to :user @conversations可能来自用户的对话,因此将Conversation归属为:user
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.