对于一个大学团体项目,我们正在创建一个 Rails 应用程序,可以在其中创建、访问大学课程等。
该项目的要求之一是“课程协调员必须能够将用户设置为给定课程的标记者”。为了解决这个问题,有一个角色表,它存储 user_id、course_id 和角色(在本例中为“Marker”)。
我创建了一个视图,课程协调员可以在其中从所有用户中选择一个用户并将其设置为标记。这发生在课程/分配标记页面上。该页面的控制器方法如下所示:
def assign_marker
@users = User.enrolled_users
@course = Course.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)
在这里,enrolled_users 仅返回所有非管理员用户(这有效),params[:id] 是 course_id。如果我使用看跌期权,我可以看到它具有正确的值,所以这一切都有效。
我的问题发生在我处理 post 请求的函数中:
def add_marker
Role.assign_marker(params[:user_id], params[:id])
# Flash
flash[:notice] = "#{User.find(params[:user_id]).username} was assigned as Marker to #{Course.find(params[:id]).courseName}"
# Refresh
redirect_back(fallback_location: root_path)
end
Run Code Online (Sandbox Code Playgroud)
提交表单后,我发现 add_marker 将 params[:id] 视为空白。下面是我在 haml 中的表单(对应于 allocate_marker 函数)
= form_with url: 'assign_marker', :id => "#{@course.id}" do |f|
.row
.input-field
-# Display username in selection & store id as parameter
= f.collection_select(:user_id, @users, :id, :username, :include_blank => …Run Code Online (Sandbox Code Playgroud)