设计current_user表单提交"用户不能为空白"

时间:2017-02-13 09:50:42

标签: ruby-on-rails ruby authentication devise

我在courses_controller中有一个简单的创建动作。我正在使用current_user.built命令来创建对象

courses_controller.rb

class CoursesController < ApplicationController
  before_action :authenticate_user!, expect: [:index, :show] 
  before_action :set_course, only: [:show, :edit, :update, :destroy]


  # GET /courses/new
  def new
    @course = current_user.courses.build
  end





  # POST /courses
  # POST /courses.json
  def create
    @course = current_user.courses.build(course_params)
    respond_to do |format|
      if @course.save
        format.html { redirect_to @course, notice: 'Course was successfully created.' }
        format.json { render :show, status: :created, location: @course }
      else
        format.html { render :new }
        format.json { render json: @course.errors, status: :unprocessable_entity }
      end
    end
  end





  private
    # Use callbacks to share common setup or constraints between actions.
    def set_course
      @course = Course.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def course_params
      params.require(:course).permit(:name, :description, :user_id)
    end
end

在浏览器中创建新课程时,我收到以下错误:

1错误禁止此课程被保存: 用户不能为空

这是表单视图:

<%= form_for(@course) do |f| %>
  <% if @course.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@course.errors.count, "error") %> prohibited this course from being saved:</h2>

      <ul>
      <% @course.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :description %><br>
    <%= f.text_area :description %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

任何想法可能会出现问题吗? Devise和current_user方法在控制台和其他模型上运行良好

1 个答案:

答案 0 :(得分:1)

在您的控制器中,方法course_params不应允许user_id在参数中传递,除非您希望用户为其他用户创建课程。因为你是从current_user构建课程所以不需要它。

同时检查您的课程模型是否验证了用户的状态,而不是user_id。