param丢失或值为空错误

时间:2014-10-14 01:43:14

标签: ruby-on-rails ruby-on-rails-4

我遇到了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为零。我猜这与强大的障碍有关,但我不确定我做错了什么。

3 个答案:

答案 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)

在_action set_student中的

你是param [:id]的用户,而你的参数没有它......我认为你应该使用param [:student_id]而不是

答案 2 :(得分:0)

既然你传递@student的路径不是student_path(@student)而不是你拥有的那个,那就是students_path(@student)?