CSC/ECE 517 Spring 2024 - E2403 Mentor-Meeting Management: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
 
(57 intermediate revisions by 2 users not shown)
Line 1: Line 1:
This wiki page describes changes made under the E2407 OODD assignment for Spring 2024, CSC/ECE 517.
__TOC__
__TOC__
== Expertiza Background==
==Background==
Ruby on Rails is used in the development of the open-source project Expertiza. The NC State staff and students are in charge of maintaining this online application. With this program, the teacher has total control over the tasks in their class. Expertiza is a feature-rich program that can manage any kind of assignment, with features like peer reviews, group creation, and subject addition. Go to the Expertiza wiki to find out more about all of the features that Expertiza offers.
Expertiza is an open-source course management web application, that is maintained by students and teaching staff across NC State and other universities. Specifically, Expertiza is used as a platform to help students learn how to work collaboratively on large Object Oriented Programming Assignments. If you would like to learn more about Expertiza, please check the Expertiza wiki[https://wiki.expertiza.ncsu.edu/index.php?title=Main_Page], or the GitHub page [https://github.com/expertiza]. For our project in particular, we were tasked with improving the mentor management system on Expertiza.
 
== About Controller ==
'''review_mapping_controller''' function is to map the reviewer to an assignment. In essence, the controller manages the distribution of reviews among various groups or individual student users, addressing situations such as peer and self-evaluations. Furthermore, the controller is essential in responding to student users' requests and enabling additional bonus reviews that comply with the assignment criteria.
 
 
== Functionality of review_mapping_controller ==
The review_mapping_controller serves as a critical component within a system designed to manage the assignment mapping and allocation of reviewers for various types of assessments, such as peer reviews and self-assessments. Its primary function revolves around orchestrating the distribution of these reviews, whether they are assigned to multiple teams or to individual student users. This entails a sophisticated algorithmic process that takes into account factors such as fairness, diversity of perspectives, and adherence to assignment guidelines. By controlling the assignment of reviews, the controller ensures that each participant receives a balanced and constructive evaluation of their work, contributing to the overall integrity and effectiveness of the assessment process.
 
Furthermore, the review_mapping_controller plays a pivotal role in handling student requests for additional bonus assessments. These requests may arise due to various reasons such as a desire for more feedback, a pursuit of extra credit, or a need for reassessment. In responding to such requests, the controller must maintain alignment with the established guidelines and constraints of the assignments. This involves evaluating the feasibility of accommodating extra assessments without compromising the integrity or fairness of the evaluation process. Additionally, the controller may need to consider resource constraints, such as the availability of reviewers and the workload distribution among them.


== What is a Mentor? ==
On Expertiza some users are known as mentors. These mentors can both be added to teams manually and automatically assigned if the assignment moderator chooses to select an option where mentors are automatically assigned to teams above 50% capacity. In practice, this means that if you have a max team size of 3, and 2 teammates have been added to team X then team X will automatically be given a mentor.


== Problem Statement ==
== Problem Statement ==
The review_mapping_controller presents a challenge due to its length, complexity, and sparse comments, making it difficult for developers to grasp its functionality efficiently. To address this, the controller should undergo a comprehensive refactoring process aimed at breaking down lengthy methods into smaller, more manageable pieces. This entails decomposing intricate logic into modular components, each responsible for a specific task or subtask within the overall functionality. Moreover, the refactoring effort should target instances of code duplication, consolidating repeated code segments into reusable functions or utility methods to enhance maintainability and reduce the risk of errors. By systematically restructuring the controller codebase and improving its documentation, developers can gain a clearer understanding of its inner workings, facilitating easier maintenance, debugging, and future enhancements.
The problem we have been faced with is multifaceted. First, we found that when teams are automatically built, students are not getting notified of when they are added to a team. Even more alarming is that when mentors are being added to teams, they aren't getting any type of specialized notification letting them know. Mentors should know when they are mentoring a new team, and students should know when they've been added to a team.  
 
== Tasks ==
-Refactor the long methods in review_mapping_controller.rb like assign_reviewer_dynamically, add_reviewer, automatic_review_mapping, peer_review_strategy, etc.
-Rename variable names to convey what they are used for.<br/>
-Replace switch statements with subclasses methods.<br/>
-Create models for the subclasses.<br/>
-Remove hardcoded parameters.<br/>
-Add meaningful comments and edit/remove/do not unnecessary comments.<br/>
-Try to increase the test coverage.<br/>


=== Phase 1 ===
The other problem we have fixed as part of this project is improving the view displaying the listing of the teams. The only listing of teams is on the “Create Teams” page for the assignment. It shows each team member on a separate line, with the mentor in an arbitrary place on the team.
For Phase 1 of the project we have focused working on the below mentioned issues.<br/>
-Refactor assign_reviewer_dynamically function<br/>
-Corresponding changes to the tests for assign_reviewer_dynamically<br/>
-Refactor add_reviewer function<br/>
-Corresponding changes to the tests for add_reviewer<br/>
-Correct comments and add additional comments<br/>
-Methods are named descriptively to indicate their purpose<br/>
-Fixed Code climate issues<br/>


=== Phase 2 ===
[[File:Old_Mentor_Meeting_Mangement_View.png|900px]]
For Phase 2 of the project we plan working on the below mentioned issues.<br/>
-Refactor automatic_review_mapping function<br/>
-Refactor peer_review_strategy function<br/>
-Replace switch statements with subclasses methods<br/>
-Increase the test coverage<br/>
-Remove hardcoded parameters<br/>
-Create models for the subclasses<br/>


== Implementation ==
Expertiza doesn’t know when mentors met with teams, so there would have to be text fields where this information could be entered. 


=== Phase 1 ===
The page would have to be accessible to all mentors and course intructors, but a mentor could only enter meetings for the teams they mentored (except that the instructor could edit any of the meeting dates for any mentor).


==== add_reviewer ====
Our project sought to fix these issues.
The changes made to the `add_reviewer` method can be checked in the commit - https://github.com/NidhayPancholi/expertiza/commit/b325810d67da2a03d3ccb15458926d0049fdb9eb. The changes are described descriptively below.:<br/>


- Refactored the `add_reviewer` method to focus on single tasks per method, enhancing code readability and maintainability.<br/>
== Tasks ==
- Extracted the functionality to find a user's ID by name into a separate method named `find_user_id_by_name`.<br/>
- Separated the logic to check if a user is trying to review their own artifact into its own method named `user_trying_to_review_own_artifact?`.<br/>
- Abstracted the process of assigning a reviewer to the assignment into a method named `assign_reviewer`.<br/>
- Created a method named `registration_url` to generate the registration URL for the assignment based on provided parameters.<br/>
- Divided the code to create a review response map into a separate method named `create_review_response_map`.<br/>
- Extracted the logic to redirect to the list mappings page after adding the reviewer into its own method named `redirect_to_list_mappings`.<br/>
- Added descriptive comments to each method to explain its purpose and functionality clearly.<br/>


==== assign_reviewer_dynamically ====
=== Email Notifications ===
The changes made to the `assign_reviewer_dynamically` method can be checked in the commit - https://github.com/NidhayPancholi/expertiza/commit/30a3625d4188e56a58e4b6472c52b60bbfb83df5. The changes are described descriptively below:<br/>


- Restructured the `assign_reviewer_dynamically` method to perform single tasks per method, improving code organization and readability.<br/>
- Add new mailer function for team addition confirmation<br/>
- Extracted the functionality to find the assignment participant into a separate method called `find_participant_for_assignment`.<br/>
- Add HTML partials for both the mentor-specific and student-specific emails<br/>
- Abstracted the logic to handle errors when no topic is selected into a method named `topic_selection_error?`.<br/>
- Add correct mailer function calls where users/mentors are added<br/>
- Created a method named `dynamically_assign_reviewer` to handle the process of dynamically assigning a reviewer based on the assignment type.<br/>
- Add tests<br/>
- Separated the logic to assign a reviewer when the assignment has topics into a method named `assign_reviewer_with_topic`.<br/>
- Developed a method called `select_topic_to_review` to handle the selection of a topic for review.<br/>
- Extracted the logic to assign a reviewer when the assignment has no topics into a method named `assign_reviewer_without_topic`.<br/>
- Created a method named `select_assignment_team_to_review` to handle the selection of an assignment team for review.<br/>
- Abstracted the process to redirect to the student review list page into a method called `redirect_to_student_review_list`.<br/>
- Added clear comments to each method to explain its purpose and functionality effectively.<br/>


==== Changes to the spec file ====
=== Mentor Meeting Management ===
The changes made to the test files are described below and can be found in the commit - https://github.com/expertiza/expertiza/commit/7c08070f0c2c000e64e55561b882e44fc81bc98f:<br/>


- Updated the `ReviewMappingController` spec file.<br/>
- Create a new view that shows the team listing in a more intuitive and easy way.<br/>
- Added a test case in the `ReviewMappingController` spec file for the `add_reviewer` method to ensure correct behavior when a team user exists and `get_reviewer` method returns a reviewer.<br/>
- Add input fields for each team where mentors and instructors can enter new, view, edit dates when mentor meetings were conducted.<br/>
- Adjusted the expectation in the `assign_reviewer_dynamically` test case to match the corrected error message in the controller. Specifically, removed the extra space from the expected error message to align with the actual error message generated by the controller.<br/>
- Instructors can edit all dates for mentor meetings regardless of the team.<br/>
- Ensured that all test cases are descriptive and cover the relevant scenarios for each method.<br/>
- Mentors can also edit dates but only for the team they are mentoring.<br/>
- Verified that the test cases accurately reflect the behavior of the controller methods after the code changes.<br/>
- Add more than three dates for the mentor meetings easily by pressing the + icon at the end of the view.<br/>
- The meeting dates should not be editable for teams having capacity less than 50%.<br/>
- Show user information in the view.


== Test Plan ==
== Implementation ==
We plan on adding more tests, increasing the test coverage in Project 4.
 
In our Test-Driven Development (TDD) endeavors, our team would strategically adopt Mustafa Olmez's meticulously crafted test skeletons. These meticulously designed skeletons will serve as invaluable blueprints, delineating the essential tests necessary for our unit. By integrating these meticulously designed test skeletons into our workflow, we conduct comprehensive testing of our controller module. This method would enable us to thoroughly explore the functionality of our controller, ensuring meticulous examination and validation of its behavior. Incorporating these test skeletons will not only establish a sturdy framework for our unit tests but also elevate the overall quality and dependability of our codebase.


'''Test Plan'''
=== Email Notifications ===


Our Test Plan includes test for <code>review_mapping_controller.rb</code> file for the following functions:<br/>
==== add_member ====
[[File:add_member_email.png | 900px]]


1. Test <code>`action_allowed?`</code> method:<br/>
First, we added to the add_member functions in both the Team and MentoredTeam models. This is because, as has already been stated, when a member is added, that is when we want the notification to be sent.
  - Test when the action is <code>'add_dynamic_reviewer'</code>.<br/>
  - Test when the action is <code>'show_available_submissions'</code>.<br/>
  - Test when the action is <code>'assign_reviewer_dynamically'</code>.<br/>
  - Test when the action is <code>'assign_metareviewer_dynamically'</code>.<br/>
  - Test when the action is <code>'assign_quiz_dynamically'</code>.<br/>
  - Test when the action is <code>'start_self_review'</code>.<br/>
  - Test when the action is not any of the allowed actions for different roles.<br/>


2. Test <code>`add_calibration`</code> method:<br/>
==== New Code in add_member ====
  - Test when the participant is already assigned.<br/>
[[File:new_add_member_email.png | 900px]]
  - Test when the participant is not assigned.<br/>
  - Test when a calibration map already exists.<br/>
  - Test when a calibration map does not exist.<br/>
  - Test redirection to the response creation page.<br/>


3. Test <code>`select_reviewer`</code> method:<br/>
We added a check for the assignment_id parameter since there are some cases where add_member is called without an assignment. Additionally, we checked whether a user was a mentor or not, as that will be the determining factor as to which email the user will receive. Of course, we didn't want to do a type check, however, we saw no better options unless we went outside the scope of the assignment and added a whole new mentor class (since mentor is not an actual class in the system). We also had to check that the user is not a participant, as there are some odd scenarios where participants are passed as the user parameter in add_member. Our assignment has nothing to do with the participant class, only the user class, so we simply did a type check to make sure we didn't send emails to participants. Again, we wouldn't normally choose to do a type check, but since it involves code completely outside the scope of this project "participants" we chose to simply check that users aren't participants.  
  - Test when called with a valid contributor_id.<br/>
  - Test when called with an invalid contributor_id.<br/>


4. Test <code>`select_metareviewer`</code> method:<br/>
==== send_team_confirmation_mail_to_user ====
  - Test when given a valid response map id.<br/>
[[File:team_confirm.png | 900px]]
  - Test when given an invalid response map id.<br/>


5. Test <code>`add_reviewer`</code> method:<br/>
Once we know what type of user we are working with, we call the MailerHelper.send_team_confirmation_mail_to_user to send the correct email to the student/mentor. This function discerns the user email, subject, name of user, team name, and assignment name before calling upon the generic_message function in the mailer class to send an actual email.
  - Test when the reviewer is not assigned to review their own artifact.<br/>
  - Test when the reviewer is assigned to review their own artifact.<br/>
  - Test when the reviewer is already assigned to the contributor.<br/>


6. Test <code>`assign_reviewer_dynamically`</code> method:<br/>
==== Modified generic_message ====
  - Test when a topic is selected and review is allowed.<br/>
[[File:mod_generic_message.png | 900px]]
  - Test when no topic is selected and review is allowed.<br/>
  - Test when no topic is selected and review is not allowed.<br/>
  - Test when a topic is selected and review is not allowed.<br/>
  - Test when there are no available topics to review.<br/>
  - Test when there are no available artifacts to review.<br/>
  - Test when the reviewer has reached the maximum number of outstanding reviews.<br/>


7. Test <code>`review_allowed?`</code> method:<br/>
We modified the generic_message function to include the team name as that's something that would be included in most messages. This function then uses the partials seen below to build the exact message our students/mentors will receive in their inbox. (note: generic_message is in mailer.rb under the mailer folder)
  - Test when the reviewer has not reached the maximum number of reviews allowed for the assignment.<br/>
  - Test when the reviewer has reached the maximum number of reviews allowed for the assignment.<br/>


8. Test <code>`check_outstanding_reviews?`</code> method:<br/>
==== Student HTML Partial ====
  - Test when there are no review mappings for the assignment and reviewer.<br/>
  - Test when there are review mappings for the assignment and reviewer, and all reviews are completed.<br/>
  - Test when there are review mappings for the assignment and reviewer, and some reviews are in progress.<br/>


9. Test <code>`assign_quiz_dynamically`</code> method:<br/>
[[File:Student_Email.png | 888px]]
  - Test when the reviewer has already taken the quiz.<br/>
  - Test when the reviewer has not taken the quiz yet.<br/>
  - Test when an error occurs during the assignment process.<br/>


10. Test <code>`add_metareviewer`</code> method:<br/>
==== Mentor HTML Partial ====
    - Test when a metareviewer is successfully added.<br/>
    - Test when the metareviewer is already assigned to the reviewer.<br/>
    - Test when an error occurs during the process.<br/>


11. Test <code>`assign_metareviewer_dynamically`</code> method:<br/>
[[File:Mentor_Email.png | 888px]]
    - Test when there are reviews to Meta review.<br/>
    - Test when there are no reviews to Meta review.<br/>
    - Test when an error occurs during assignment of metareviewer.<br/>


12. Test <code>`get_reviewer`</code> method:<br/>
    - Test when the user is a participant in the assignment.<br/>
    - Test when the user is not a participant in the assignment.<br/>


13. Test <code>`delete_outstanding_reviewers`</code> method:<br/>
=== Mentor Meeting Management ===
    - Test when there are outstanding reviewers.<br/>
    - Test when there are no outstanding reviewers.<br/>


14. Test <code>`delete_all_metareviewers`</code> method:<br/>
==== New Mentor Meeting Management View ====
    - Test when there are metareview mappings to delete.<br/>
    - Test when there are unsuccessful deletes.<br/>
    - Test when there are no metareview mappings to delete.<br/>


15. Test <code>`unsubmit_review`</code> method:<br/>
As you can see in the Problem Statement section that the team listing view is not very intuitive. We have built a new view as shown in the screenshot below which has more functionality and is more easy to understand. This view also has input fields for the teams where the instructors or mentors can add the dates when the mentor meeting was conducted.  
    - Test when the response is successfully unsubmitted.<br/>
    - Test when the response fails to be unsubmitted.<br/>


16. Test <code>`delete_reviewer`</code> method:<br/>
This view also has a lot of the user and team information present in the same table such as team name, member names, member IDs, mentor names and member email IDs.
    - Test when the review response map exists and there are no associated responses.<br/>
    - Test when the review response map exists but there are associated responses.<br/>
    - Test when the review response map does not exist.<br/>


17. Test <code>`delete_metareviewer`</code> method:<br/>
You can also see that some dates are already present in the input fields. If meetings have already been conducted and fed to the system, they will show up in the appropriate rows as you can see in the screenshot. Only the instructors have the ability to edit any of these dates and the mentors can only edit the dates for their teams only. Apart from this, you can also see that the last row with team member capacity less than 50% is disabled for any kind of entry in the meeting date input fields. This is because only teams having capacity more than 50% can have mentor meetings.  
    - Test when the metareview mapping exists.<br/>
    - Test when the metareview mapping does not exist.<br/>


19. Test <code>`list_mappings`</code> method.<br/>
[[File:New Mentor Meeting Mangement View.png|900px]]


20. Test <code>`automatic_review_mapping`</code> method.<br/>
==== Code changes in the views ====


21. Test <code>`automatic_review_mapping_strategy`</code> method.<br/>
We added a small code change the teams view where we have written code to render the new view.  


22. Test <code>`automatic_review_mapping_staggered`</code> method.<br/>
[[File:Team View.png|900px]]


23. Test <code>`save_grade_and_comment_for_reviewer`</code> method.<br/>
The actual code for the new view is written in the tree_display view where we have modified the table and also added JavaScript code for validations and calling controllers asynchronously.  


24. Test <code>`start_self_review`</code> method.<br/>
[[File:New_Mentor_Meeting_View.png|900px]]


25. Test <code>`assign_reviewers_for_team`</code> method.<br/>
==== Code changes in the controller ====


26. Test <code>`peer_review_strategy`</code> method.<br/>
We added a new controller(mentor_meeting.rb) to perform the CRUD operations on the mentor meeting table.


27. Test <code>`review_mapping_params`</code> method.<br/>
[[File:Mentor Meeting Controller.png|900px]]


== Design Pattern ==
==== Helper code ====
During our code refactoring process, we leveraged various design patterns to enhance readability and maintainability. One commonly applied pattern was "Extract Method," where we identified lengthy and intricate methods and extracted segments of functionality into separate methods. This restructuring made the code more comprehensible and easier to grasp by isolating specific tasks within dedicated methods.


Additionally, we addressed the issue of excessive conditional statements by employing the "Refactoring Conditionals" design pattern. Instead of cluttering the code with numerous conditionals, we refactored by encapsulating the logic within these conditionals into distinct methods. By doing so, we streamlined the code's flow and improved its readability, making it clearer to understand the purpose and execution of each segment.
We also wrote a helper code to map all the team IDs in the mentor meeting table to the appropriate meeting dates.


[[File:Mentor Meeting Helper.png|900px]]


== Relevant Links ==
== Relevant Links ==
* '''Github Repository:''' https://github.com/NidhayPancholi/expertiza
* '''Github Repository:''' https://github.com/ExtremeMachine12/expertiza
* '''Pull Request:''' https://github.com/expertiza/expertiza/pull/2767
* '''Pull Request:''' https://github.com/expertiza/expertiza/pull/2769
* '''Pull Request:''' https://github.com/expertiza/expertiza/pull/2772


== Team ==
== Team ==
=== Mentor ===
=== Mentor ===
* Ananya Mantravadi  (amantra)
* Ed Gehringer (efg)


=== Team Members ===
=== Team Members ===
* Lagani Patel (lpatel)
* Samuel Kwiatkowski-Martin (slkwiatk)
* Nidhay Pancholi (nrpancho)
* Tanmay Pardeshi (tpardes)
* Saloni Shah (sshah39)
* Bala Logesh Sudalaimuthu Pandian (bsudala)

Latest revision as of 00:29, 25 March 2024

Background

Expertiza is an open-source course management web application, that is maintained by students and teaching staff across NC State and other universities. Specifically, Expertiza is used as a platform to help students learn how to work collaboratively on large Object Oriented Programming Assignments. If you would like to learn more about Expertiza, please check the Expertiza wiki[1], or the GitHub page [2]. For our project in particular, we were tasked with improving the mentor management system on Expertiza.

What is a Mentor?

On Expertiza some users are known as mentors. These mentors can both be added to teams manually and automatically assigned if the assignment moderator chooses to select an option where mentors are automatically assigned to teams above 50% capacity. In practice, this means that if you have a max team size of 3, and 2 teammates have been added to team X then team X will automatically be given a mentor.

Problem Statement

The problem we have been faced with is multifaceted. First, we found that when teams are automatically built, students are not getting notified of when they are added to a team. Even more alarming is that when mentors are being added to teams, they aren't getting any type of specialized notification letting them know. Mentors should know when they are mentoring a new team, and students should know when they've been added to a team.

The other problem we have fixed as part of this project is improving the view displaying the listing of the teams. The only listing of teams is on the “Create Teams” page for the assignment. It shows each team member on a separate line, with the mentor in an arbitrary place on the team.

Expertiza doesn’t know when mentors met with teams, so there would have to be text fields where this information could be entered.

The page would have to be accessible to all mentors and course intructors, but a mentor could only enter meetings for the teams they mentored (except that the instructor could edit any of the meeting dates for any mentor).

Our project sought to fix these issues.

Tasks

Email Notifications

- Add new mailer function for team addition confirmation
- Add HTML partials for both the mentor-specific and student-specific emails
- Add correct mailer function calls where users/mentors are added
- Add tests

Mentor Meeting Management

- Create a new view that shows the team listing in a more intuitive and easy way.
- Add input fields for each team where mentors and instructors can enter new, view, edit dates when mentor meetings were conducted.
- Instructors can edit all dates for mentor meetings regardless of the team.
- Mentors can also edit dates but only for the team they are mentoring.
- Add more than three dates for the mentor meetings easily by pressing the + icon at the end of the view.
- The meeting dates should not be editable for teams having capacity less than 50%.
- Show user information in the view.

Implementation

Email Notifications

add_member

First, we added to the add_member functions in both the Team and MentoredTeam models. This is because, as has already been stated, when a member is added, that is when we want the notification to be sent.

New Code in add_member

We added a check for the assignment_id parameter since there are some cases where add_member is called without an assignment. Additionally, we checked whether a user was a mentor or not, as that will be the determining factor as to which email the user will receive. Of course, we didn't want to do a type check, however, we saw no better options unless we went outside the scope of the assignment and added a whole new mentor class (since mentor is not an actual class in the system). We also had to check that the user is not a participant, as there are some odd scenarios where participants are passed as the user parameter in add_member. Our assignment has nothing to do with the participant class, only the user class, so we simply did a type check to make sure we didn't send emails to participants. Again, we wouldn't normally choose to do a type check, but since it involves code completely outside the scope of this project "participants" we chose to simply check that users aren't participants.

send_team_confirmation_mail_to_user

Once we know what type of user we are working with, we call the MailerHelper.send_team_confirmation_mail_to_user to send the correct email to the student/mentor. This function discerns the user email, subject, name of user, team name, and assignment name before calling upon the generic_message function in the mailer class to send an actual email.

Modified generic_message

We modified the generic_message function to include the team name as that's something that would be included in most messages. This function then uses the partials seen below to build the exact message our students/mentors will receive in their inbox. (note: generic_message is in mailer.rb under the mailer folder)

Student HTML Partial

Mentor HTML Partial


Mentor Meeting Management

New Mentor Meeting Management View

As you can see in the Problem Statement section that the team listing view is not very intuitive. We have built a new view as shown in the screenshot below which has more functionality and is more easy to understand. This view also has input fields for the teams where the instructors or mentors can add the dates when the mentor meeting was conducted.

This view also has a lot of the user and team information present in the same table such as team name, member names, member IDs, mentor names and member email IDs.

You can also see that some dates are already present in the input fields. If meetings have already been conducted and fed to the system, they will show up in the appropriate rows as you can see in the screenshot. Only the instructors have the ability to edit any of these dates and the mentors can only edit the dates for their teams only. Apart from this, you can also see that the last row with team member capacity less than 50% is disabled for any kind of entry in the meeting date input fields. This is because only teams having capacity more than 50% can have mentor meetings.

Code changes in the views

We added a small code change the teams view where we have written code to render the new view.

The actual code for the new view is written in the tree_display view where we have modified the table and also added JavaScript code for validations and calling controllers asynchronously.

Code changes in the controller

We added a new controller(mentor_meeting.rb) to perform the CRUD operations on the mentor meeting table.

Helper code

We also wrote a helper code to map all the team IDs in the mentor meeting table to the appropriate meeting dates.

Relevant Links

Team

Mentor

  • Ed Gehringer (efg)

Team Members

  • Samuel Kwiatkowski-Martin (slkwiatk)
  • Tanmay Pardeshi (tpardes)
  • Bala Logesh Sudalaimuthu Pandian (bsudala)