Ruby on rails 获取具有包含特定值的数组的所有对象
我有一个名为students的对象数组,如下所示:Ruby on rails 获取具有包含特定值的数组的所有对象,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个名为students的对象数组,如下所示: [ { student_id: '1', student_name: 'student 1', courses: [ { course_id: 'dxgk22452', course_name: 'courses 1' }, { course_id: 'asdf9d2d', course_name: 'courses 2'}, { course_id: 'h355dsf4', c
[
{
student_id: '1',
student_name: 'student 1',
courses: [
{ course_id: 'dxgk22452', course_name: 'courses 1' },
{ course_id: 'asdf9d2d', course_name: 'courses 2'},
{ course_id: 'h355dsf4', course_name: 'courses 3'}
]
},
{
student_id: '2',
student_name: 'student 2',
courses: [
{ course_id: 'asdf9d2d', course_name: 'courses 2'},
{ course_id: 'glld9432d2', course_name: 'courses 4' }
]
},
{
student_id: '3',
student_name: 'student 3',
courses: [
{ course_id: 'dxgk22452', course_name: 'courses 1' },
{ course_id: 'glld9432d2', course_name: 'courses 4' }
]
}
]
我试图找出获取包含特定课程id的所有对象的最佳方法
我尝试了students.where(courses.course_id==“dxgk22452”)
,但运气不佳,找不到关于我具体情况的帖子
最好的办法是什么 您可以迭代两次以选择这些散列,其中它们的
课程
至少包括一个其课程id
等于dxgk22452
的散列:
data.select { |e| e[:courses].find { |f| f[:course_id] == 'dxgk22452' } }
您可以迭代两次以选择这些散列,其中它们的
课程
至少包括一个其课程id
等于dxgk22452
的散列:
data.select { |e| e[:courses].find { |f| f[:course_id] == 'dxgk22452' } }
给定一个数组:
students = [
{
student_id: '1',
student_name: 'student 1',
courses: [
{ course_id: 'dxgk22452', course_name: 'courses 1' },
{ course_id: 'asdf9d2d', course_name: 'courses 2'},
{ course_id: 'h355dsf4', course_name: 'courses 3'}
]
},
{
student_id: '2',
student_name: 'student 2',
courses: [
{ course_id: 'asdf9d2d', course_name: 'courses 2'},
{ course_id: 'glld9432d2', course_name: 'courses 4' }
]
},
{
student_id: '3',
student_name: 'student 3',
courses: [
{ course_id: 'dxgk22452', course_name: 'courses 1' },
{ course_id: 'glld9432d2', course_name: 'courses 4' }
]
}
]
返回课程包含给定值的学生:
students.select { |student| student[:courses].any? { |course| course[:course_id] == 'dxgk22452' } }
=> [
{
student_id: '1',
student_name: 'student 1',
courses: [
{ course_id: 'dxgk22452', course_name: 'courses 1' },
{ course_id: 'asdf9d2d', course_name: 'courses 2'},
{ course_id: 'h355dsf4', course_name: 'courses 3'}
]
},
{
student_id: '3',
student_name: 'student 3',
courses: [
{ course_id: 'dxgk22452', course_name: 'courses 1' },
{ course_id: 'glld9432d2', course_name: 'courses 4' }
]
}
]
给定一个数组:
students = [
{
student_id: '1',
student_name: 'student 1',
courses: [
{ course_id: 'dxgk22452', course_name: 'courses 1' },
{ course_id: 'asdf9d2d', course_name: 'courses 2'},
{ course_id: 'h355dsf4', course_name: 'courses 3'}
]
},
{
student_id: '2',
student_name: 'student 2',
courses: [
{ course_id: 'asdf9d2d', course_name: 'courses 2'},
{ course_id: 'glld9432d2', course_name: 'courses 4' }
]
},
{
student_id: '3',
student_name: 'student 3',
courses: [
{ course_id: 'dxgk22452', course_name: 'courses 1' },
{ course_id: 'glld9432d2', course_name: 'courses 4' }
]
}
]
返回课程包含给定值的学生:
students.select { |student| student[:courses].any? { |course| course[:course_id] == 'dxgk22452' } }
=> [
{
student_id: '1',
student_name: 'student 1',
courses: [
{ course_id: 'dxgk22452', course_name: 'courses 1' },
{ course_id: 'asdf9d2d', course_name: 'courses 2'},
{ course_id: 'h355dsf4', course_name: 'courses 3'}
]
},
{
student_id: '3',
student_name: 'student 3',
courses: [
{ course_id: 'dxgk22452', course_name: 'courses 1' },
{ course_id: 'glld9432d2', course_name: 'courses 4' }
]
}
]
在发布代码示例时,请花费额外的时间确保代码有效。我必须更正您的示例中的许多错误才能使其有效。如果目标
:课程id
是'dxgk22452'
,我假设您希望返回[students[0],students[2]]
。对的如果是这样,为了保持代码干燥(不要重复),您可能希望返回[0,2]
。假设您不打算将返回值链接到另一个方法。发布代码示例时,请花费额外的时间确保代码有效。我必须更正您的示例中的许多错误才能使其有效。如果目标:课程id
是'dxgk22452'
,我假设您希望返回[students[0],students[2]]
。对的如果是这样,为了保持代码干燥(不要重复),您可能希望返回[0,2]
。这假设您不打算将返回值链接到另一个方法。