【发布时间】:2020-08-26 20:00:28
【问题描述】:
对于一个大学小组项目,我们正在创建一个 Rails 应用程序,可以在其中创建、访问等 Uni 课程。
“课程协调员必须能够将用户设置为给定课程的标记”项目的要求之一。为了解决这个问题,有一个角色表,其中存储了 user_id、course_id 和角色,在本例中为“Marker”。
我创建了一个视图,课程协调员可以在其中从所有用户中选择一个用户并将其设置为标记。这发生在课程/assign_marker 页面上。该页面的控制器方法如下所示:
def assign_marker
@users = User.enrolled_users
@course = Course.find(params[:id])
end
这里,enrolled_users 只返回所有不是管理员的用户(这可行),params[:id] 是 course_id。如果我使用 puts,我可以看到它具有正确的值,所以一切正常。
我的问题出现在我处理发布请求的函数中:
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
提交表单后,我发现 add_marker 将 params[:id] 视为空白。下面是我的haml形式(对应assign_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 => true)
%label Users
= button_tag "Set as Marker", {:class => "waves-effect waves-light btn"}
如果我将 #{@course.id} 放置在视图中的任何位置,我可以看到正确的 course_id 显示。我试图在 form_with 中设置 id,如上所示,因为这就是我对 form_tag 所做的。显然这不起作用,并且 add_marker 没有通过 params[:id] 看到它。
另外,我上面的 get 和 post 请求的路由如下:
get 'courses/assign_marker', :to => 'courses#assign_marker'
post 'courses/assign_marker', :to => 'courses#add_marker'
我对 Rails 还很陌生,所以我可能遗漏了一些非常明显的东西。任何帮助将非常感激 :)。谢谢
【问题讨论】:
标签: ruby-on-rails ruby haml