我遇到了params.require()。permit()的问题。我有一个来自设计的用户模型和一个代表一个类的组模型(如学术课)。当用户在组索引视图上时,我希望他们能够单击加入并成为该组的一部分。
<%= form_for @student, :url => students_path(@student), method: :post do %>
<%= hidden_field :student_id, :value => current_user.id %>
<%= hidden_field :course_id, :value => group.id %>
<%= submit_tag "+ Join", :class => "btn btn-primary pull-right join-button" %>
<% end %>
我的想法是,我会将当前用户ID以及他们点击加入的组ID作为隐藏值传递,因此只会有一个加入按钮。
我的组控制器索引方法如下所示
def index
@groups = Group.all
@student = Student.new
end
我的学生管理员看起来像这样:
class StudentsController < ApplicationController
before_action :set_student, only: [:show, :edit, :update, :destroy]
def index
#@students = Student.all
@students = Student.where(:student_id => current_user.id)
#respond_with(@students)
end
def show
#respond_with(@student)
@students = Student.find(params[:id])
end
def new
@student = Student.new
#respond_with(@student)
end
def edit
end
def create
@student = Student.new(student_params)
@student.save
#respond_with(@student)
end
def update
@student.update(student_params)
#respond_with(@student)
end
def destroy
@student.destroy
#respond_with(@student)
end
private
def set_student
@student = Student.find(params[:id])
end
def student_params
params.require(:student).permit(:course_id, :student_id)
end
end
每当我尝试提交表单(也就是点击加入按钮)时,我都会收到错误消息:
param is missing or the value is empty: student
我也得到这个信息,就学生和小组ID
而言是正确的Request
Parameters:
{"authenticity_token"=>"/bJYZBGr6lfAzb9mYnvRfMZII+QS8iskd0MRuHh+RnE=",
"course_id"=>"10",
"student_id"=>"4"}
这也插入到数据库中,但student_id和course_id为零。我猜这与强大的障碍有关,但我不确定我做错了什么。
答案 0 :(得分:2)
看起来form_for块中缺少form_builder对象。试试这个:
<%= form_for @student, :url => students_path(@student), method: :post do |f| %>
<%= f.hidden_field :student_id, :value => current_user.id %>
<%= f.hidden_field :course_id, :value => group.id %>
<%= submit_tag "+ Join", :class => "btn btn-primary pull-right join-button" %>
<% end %>
没有构建器我不相信rails会在提交的参数中提供学生哈希
答案 1 :(得分:1)
你是param [:id]的用户,而你的参数没有它......我认为你应该使用param [:student_id]而不是
答案 2 :(得分:0)
既然你传递@student的路径不是student_path(@student)而不是你拥有的那个,那就是students_path(@student)?