我有五个表单输入作为文本,基本上我想在每个页面加载为用户随机显示它们。现在它显示为1-5,但我希望每次都随机。
show.html.erb
<p class="question-answer-choice"><%= @post.answer_choice %></p>
<p class="question-answer-choice"><%= @post.answer_choice_2 %></p>
<p class="question-answer-choice"><%= @post.answer_choice_3 %></p>
<p class="question-answer-choice"><%= @post.answer_choice_4 %></p>
<p class="question-answer-choice"><%= @post.answer_choice_5 %></p>
我正在对表单输入变量尝试.sample方法(?),但它不会执行任何操作或显示在视图中。
posts_controller.rb
...
@randomize_posts = ["@post.answer_choice", "@post.answer_choice_2", "@post.answer_choice_3", "@post.answer_choice_4", "@post.answer_choice_5"].sample
...
答案 0 :(得分:1)
我会在@randomize_posts
上使用shuffle方法,然后在视图中使用它
posts_controller.rb
@randomize_posts = [
@post.answer_choice,
@post.answer_choice_2,
@post.answer_choice_3,
@post.answer_choice_4,
@post.answer_choice_5
].shuffle
show.html.erb
<% @randomize_posts.each do |answer_choice| %>
<p class="question-answer-choice"><%= answer_choice %></p>
<% end %>
答案 1 :(得分:1)
您可以使用select来获取对象中与其名称中的answer匹配的每个属性,然后获取值,如:
@randomize_posts = @post.attributes.select { |name, _| name =~ /answer/ }.values.shuffle
然后在你看来:
<% @randomize_posts.each do |answer| %>
<p class="question-answer-choice"><%= answer %></p>
<% end %>
当您拥有@post
对象时,可以使用@post.attributes
访问其属性,这会给您一个像:
@post.attributes
=> {
"id"=>1,
"answer_choice"=>"answer_choice",
"answer_choice2"=>"answer_choice2",
... # Plus other additional attributes
有了哈希,那么你可以使用select,to&#34; filter&#34;对于名称与单词answer匹配的属性(名称是散列键,并且是唯一需要的属性,因此您可以避免使用该值以及我使用_
的原因)。所以你会得到类似的东西:
@post.attributes.select { |name, _| name =~ /answer/ }
# => { "answer_choice"=>"answer_choice", "answer_choice2"=>"answer_choice2" ... }
因此,从散列中,您只能将值作为hash.values:
["answer_choice", "answer_choice2" ...]
你得到一个数组,现在可以使用shuffle
。