Rails在视图中随机输入数据?

时间:2017-09-25 09:07:44

标签: ruby-on-rails

我有五个表单输入作为文本,基本上我想在每个页面加载为用户随机显示它们。现在它显示为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
...

2 个答案:

答案 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