【发布时间】:2013-07-06 19:01:33
【问题描述】:
让我先解释一下我想做什么:
我有这些模型:
"Question"
name:string
belongs_to :Category
"Category"
name:string
has_many :Questions
AgendaItem
title:string
body:string
belongs_to :Category
"Meeting"
has_many :Questions
has_many :AgendaItems
这个过程是这样的: 用户创建会议并向其添加来自许多不同类别的许多问题(约 12 个类别,每个类别有 10-20 个问题)。
我已经完成了一些工作,所以我开了一个会议,上面有很多问题。
现在,当用户在名为“Finalise”的会议上执行特定操作时,我想为每个不同的 Category 创建一个 AgendaItem(使用会议的问题),AgendaItem 的 :title 应该是 Category 的 :name它的 :body 应该是在该类别下选择的所有问题
eg: <ul><li>Question1</li><li>Question2</li>...</ul>
我可以在一个讨厌的大循环中执行此操作(并检查我现在处理的问题的当前类别是否与前一个不同并创建一个新的 AgendaItem),或者使用两个循环(一个用于创建不同的 AgendaItems ,然后将问题弹出到 :body)
但我确信有更好的方法,使用数组和注入。
我当前的代码创建了一个哈希数组(我认为),如下所示:
[{:id=>1, :question=>"Question1"}, {:id=>1, :question=>"Question3"},{:id=>3, :question=>Question10}]
这是执行此操作的代码:
@meeting = Meeting.find <the_id>
array = @meeting.questions.all.map { |q| { id: q.category.id, question: q.name } }
其中 :id 是类别的 :id 而 :question 是问题的 :name
我想我想这样结束:
[{:id=>1, :question=>"<li>Question1</li><li>Question3</li>"},{:id=>3, :question=><li>Question10</li>}]
然后我可以遍历它并从 :id (key) 创建一个 AgendaItem 并将它的主体设置为 :question (value)。
【问题讨论】:
标签: ruby-on-rails hash inject