ruby-on-rails - 如何过滤每个模型名称 ruby​​ on rails 的记录数组

标签 ruby-on-rails ruby ruby-on-rails-4 rails-activerecord

假设我有元素的哈希值,我需要根据其中的类名过滤掉结果。

因此,如果记录包含 PrivateSchool 的元素,我可以将 PrivateSchool 记录传递到其各自的部分。

如果 records 包含 Teacher 的元素,我可以将 Teacher 记录传递给它各自的部分。

所以,这里是partails的代码:

<% if params[:tab] && params[:tab] == "featured" %>
    <%= render partial: "featured", locals: {featured: @results} %>
<% elsif params[:tab] && params[:tab] == "schools" %>
    <%= render partial: "schools", locals: {schools: @results}  %>
<% elsif params[:tab] && params[:tab] == "playlists" %>
    <%= render partial: "playlists", locals: {playlists: @results}  %>
<% elsif params[:tab] && params[:tab] == "quizzes" %>
    <%= render partial: "quizzes", locals: {quizzes: @results}  %>
<% elsif params[:tab] && params[:tab] == "teachers" %>
    <%= render partial: "teachers", locals: {teachers: @results}  %>
<% end %>

如果我这样做 <%= @results.inspect%>它输出如下:

    [#<LessonPlan id: 9, title: "advance java", description: "advance java",
 notes: "advance java", subject_id: 2, teacher_id: 1, created_at: "2016-11-11 
09:29:20", updated_at: "2016-11-11 09:29:20", is_private: true, is_publish: 
false, user_id: 3, publish_date: nil, popularity_count: 0, is_special: false, 
private_class_id: nil>, #<Quiz id: 1, title: "java history", 
time_limit_in_minutes: 5, are_multiple_attempts_allowed: true, score_to_keep: 
"highest", number_of_attempts_allowed: 4, student_see_quiz_score: 
"after_each_attempt", show_one_question_at_a_time: true, is_private: false, 
available_from_date_time: "2016-11-08 17:13:00", available_due_date_time: 
"2016-11-10 17:18:00", instructions: "<p>java basics</p>", lesson_plan_id: 3, 
user_id: 3, publish_date: "2016-11-09 12:14:04", created_at: "2016-11-09 
12:14:04", updated_at: "2016-11-09 12:19:25", is_publish: true, subject_id: 3, 
teacher_id: 1, popularity_count: 1, show_answers: "after_the_due_date">, 
#<LessonPlan id: 4, title: "basics of java", description: "basics of java", 
notes: "basics of java", subject_id: 2, teacher_id: 1, created_at: "2016-11-07
 13:04:24", updated_at: "2016-11-10 10:40:54", is_private: false, is_publish: 
false, user_id: 3, publish_date: "2016-11-09 08:08:41", popularity_count: 0, 
is_special: false, private_class_id: nil>, #<Quiz id: 6, title: "java modern",
 time_limit_in_minutes: 155, are_multiple_attempts_allowed: true, 
score_to_keep: "latest", number_of_attempts_allowed: 9, 
student_see_quiz_score: "after_last_attempt", show_one_question_at_a_time: 
true, is_private: true, available_from_date_time: "2017-02-02 01:11:00", 
available_due_date_time: "2017-02-27 01:11:00", instructions: "<p>java modern 
java modern java modern java modern...", lesson_plan_id: 3, user_id: 3, 
publish_date: "2016-12-22 20:37:35", created_at: "2016-12-22 20:37:35", 
updated_at: "2017-02-09 20:11:38", is_publish: false, subject_id: 3, 
teacher_id: 1, popularity_count: 0, show_answers: "after_the_due_date">, 
#<Quiz id: 4, title: "Java quiz v1", time_limit_in_minutes: 180, 
are_multiple_attempts_allowed: true, score_to_keep: "latest", 
number_of_attempts_allowed: 6, student_see_quiz_score: "after_last_attempt", 
show_one_question_at_a_time: false, is_private: false, 
available_from_date_time: "2016-11-21 12:48:00", available_due_date_time: 
"2016-11-23 12:48:00", instructions: "<p>Java quiz v1</p>\r\n<p 
style=\"margin: 0px;\"><!--E...", lesson_plan_id: 8, user_id: 3, publish_date: 
"2016-11-14 07:18:41", created_at: "2016-11-14 07:18:41", updated_at: 
"2016-12-11 14:21:46", is_publish: false, subject_id: 3, teacher_id: 1, 
popularity_count: 0, show_answers: "after_the_quiz">, #<Quiz id: 3, title: 
"java basics", time_limit_in_minutes: 4, are_multiple_attempts_allowed: true, 
score_to_keep: "highest", number_of_attempts_allowed: 10, 
student_see_quiz_score: "after_last_attempt", show_one_question_at_a_time: 
true, is_private: false, available_from_date_time: "2017-01-31 14:13:00", 
available_due_date_time: "2017-02-17 14:13:00", instructions: 
"<p>XXXXXXXXXXQQQQ</p>", lesson_plan_id: 8, user_id: 3, publish_date: 
"2016-11-10 20:27:32", created_at: "2016-11-10 20:27:31", updated_at: 
"2017-02-01 09:13:22", is_publish: false, subject_id: 3, teacher_id: 1, 
popularity_count: 1, show_answers: "after_the_quiz">, #<PrivateSchool id: 18, 
teacher_id: 39, user_id: 47, title: "Dr. Jasmine E McNair High School", 
short_description: "Dr. Jasmine E McNair High School", price_type: "paid", 
logo: "download.jpg", slug: "dr-jasmine-e-mcnair-high-school", created_at: 
"2016-12-13 20:18:28", updated_at: "2016-12-13 20:18:28">]

我真正想要的是按模型类名称过滤这些记录,这样我就可以过滤记录并将相应的记录发送到它们的部分,而不是只在每个部分中显示所有记录。

目前它在一个部分中显示所有记录,这是错误的我需要按部分过滤它们,这样每个部分都会显示他的结果而不是其他模型。

所以, 如果记录属于 LessonPlan,则 LessonPlan 中的所有记录都将进入部分类(class)计划。

如果记录属于 Teacher,所有来自 Teacher 的记录都将放在 teacher partials 中。 等等。

这是我的要求。

最佳答案

你可以尝试这样的事情:

hash = @results.group_by(&:class)

然后:

hash[LessonPlan] will give you a list of all the LessonPlan

编辑:

<%= render partial: "quizzes", locals: {quizzes: hash[Quiz]}  %>

解释: 第一步。我们根据对象的类创建哈希。为此,我们对 Enumerable 使用了 Ruby 方法“group_by”。 @results.group_by(&:class) 等同于@results.group_by {|result|结果[:类]}
然后我们可以很容易地通过类名访问每个散列的值。 hash[Quiz] 将返回所有 Quiz 对象。

关于ruby-on-rails - 如何过滤每个模型名称 ruby​​ on rails 的记录数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42221759/

相关文章:

ruby-on-rails - "No explicit conversion of Symbol into String"用于 rails 4.0.1 中的新记录(仅限)

ruby-on-rails - rails 4 : How to get sweet alert confirm work?

ruby-on-rails - 避免在 Rails 4 中呈现单独的布局 CSS 文件(样式表冲突)

ruby-on-rails - Rails - I18n - 如何本地化 f.collection_select 中的符号集合

javascript - 如何在通过 'Best in place' 编辑进行内联编辑时删除 html 标签

ruby-on-rails - 从 Active Records Associations CollectionProxy 创建数组

ruby-on-rails - `count` 和 `size` 之间令人困惑的区别

ruby-on-rails - Ruby on Rails 在 rake 任务中指定环境

ruby-on-rails - ElasticSearch:如何正确映射关联以便它们也可搜索?

ruby-on-rails - 如何从 Docker 访问我的本地系统 Postgres