【发布时间】:2014-03-07 00:55:40
【问题描述】:
我正在尝试做一个测验,所以我有很多问题和很多答案。我可以随机排列问题,因此它们不会每次都以相同的顺序出现。
q = Question.all().shuffle!
然后,我尝试随机排列每个问题的所有答案:
q.each{ |i| i.answers.shuffle! }
但是当我在视图上迭代 q 时,我总是每次都以相同的顺序得到每个问题的答案。关于我做错了什么的任何提示?
编辑
如果我这样做@question = Question.find(1,2,3).shuffle!,我会得到:
[ #<Question id: 1, contenido: "lorem ipsum 1", created_at: "2014-02-09 13:13:56", updated_at: "2014-02-09 13:13:56">
#<Question id: 3, contenido: "lorem ipsum 3", created_at: "2014-02-09 13:13:56", updated_at: "2014-02-09 13:13:56">,
#<Question id: 2, contenido: "lorem ipsum2", created_at: "2014-02-09 13:13:56", updated_at: "2014-02-09 13:13:56"> ]
如果我这样做 @question.first().answers 我会得到一个这样的数组:
#<ActiveRecord::Associations::CollectionProxy [
#<Answer id: 1, contenido: "Black", correcta: true, created_at: "2014-02-09 13:13:56", updated_at: "2014-0213:13:56", question_id: 1>,
#<Answer id: 2, contenido: "Blue", correcta: false, created_at: "2014-02-09 13:13:56", updated_at: "2014-02-09 13:13:56", question_id: 1>,
#<Answer id: 3, contenido: "Yellow", correcta: false, created_at: "2014-02-09 13:13:56", updated_at: "2014-02-09 13:13:56", question_id: 1>]>
我的控制器方法如下所示:
def quiz
@questions = Question.find(1,2).shuffle!
@questions.each{ |i| i.answers.shuffle! }
end
在视图中我这样做:
<% @questions.each_with_index do |pregunta, index| %>
<div class="question-item <% if index == 0 %>current<% end %>">
<p><%= index + 1 %>- <%= pregunta.contenido %></p>
<%= hidden_field_tag "form[][pregunta]", pregunta.id %>
<%= hidden_field_tag "form[][respuesta]", "" %>
<ul>
<% pregunta.answers.each do |respuesta| %>
<li><span class="radio" data-id="<%= respuesta.id %>"></span><span><%= respuesta.contenido %></span></li>
<% end %>
</ul>
</div>
<% end %>
【问题讨论】:
-
疯了!它不应该这样发生。 :)
-
你能发布一组问题和答案的样本吗?
-
如何在视图上打印?我也想看看 answers 方法,你是怎么定义的?
-
可能是
i.answers给了你数组对象,它是原始对象的#dup,因此你在副本上进行洗牌,而不是实际的,因此您没有看到任何变化。尽管这都是可能的原因,但我不知道您的代码实际上有什么。这是一个相同的例子 ->> a = [[1,2,3],[3,6,4]] => [[1, 2, 3], [3, 6, 4]] >> a.each { |e| e.dup.shuffle! } => [[1, 2, 3], [3, 6, 4]] >> a.each { |e| e.dup.shuffle! } => [[1, 2, 3], [3, 6, 4]]. -
看到那里虽然我调用了
shuffle!,但原始a条目没有任何变化,就像我一直对@987654335 条目的dup 对象所做的那样@.
标签: ruby-on-rails ruby arrays