2017-09-25 43 views
0

我有五个表单输入作为文本,基本上我想随机显示他们在每个页面加载为用户。现在它显示为1-5,但我希望它随机每次。Rails对输入数据进行混洗?

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> 

我想要的。样品方法(?)的形式输入变量,但它没有做任何事情,或在视图中。

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 
... 

回答

1

我会使用混洗方法上@randomize_posts然后使用在视图

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 %> 
+0

我得到这个错误:未定义的方法'answer_choice'为nil:NilClass,在控制器中。 此外,不会show.html.erb代码只洗牌任何答案选择那只被称为“answer_choice”,而不是那些与_2,_3等添加在最后? – mazing

+0

answer_choice不是@post上的方法吗?在调用它的方法之前,你是否也加载过@post?我在你的数组中看到他们只是字符串,这可能是你之前没有得到错误的原因。 shuffle方法会随机化数组中的所有元素,而不管它们是什么 – hvenables

+0

通过这个,你的意思是把它放在posts.controller中的“def show”下吗? “是@post上的方法”意味着什么? – mazing

1

你可以使用select来获得你的对象名称中带有答案匹配每个属性,然后得到的值,如:

@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 

有一个哈希那么你可以ü选择“过滤”那些名称与单词答案匹配的属性(名称是哈希键,并且是唯一需要的,所以您可以避免使用该值,这就是为什么我使用_)。因此,从哈希你可以得到只有值hash.values

@post.attributes.select { |name, _| name =~ /answer/ } 
# => { "answer_choice"=>"answer_choice", "answer_choice2"=>"answer_choice2" ... } 

:所以你喜欢的东西

["answer_choice", "answer_choice2" ...] 

,你会得到一个数组,现在你可以使用它shuffle