如何为后端的记录分配用户ID?

时间:2018-07-28 20:29:58

标签: ruby-on-rails

我想确保在前端创建记录时,创建该记录的用户的用户ID自动分配给该记录。如果要在创建记录时将授权用户的ID自动分配给记录,该怎么办?对于授权,我使用gem'devise_token_auth'。

notebooks_controller.rb:

class NotebooksController < ApplicationController
    before_action :set_notebook, only: [:show, :update, :destroy]


    def index
      @notebooks = Notebook.all

      render json: @notebooks
    end

    def show
      render json: @notebook
    end

    def create
      @notebook = Notebook.new(notebooks_params)

      if @notebook.save
        render json: @notebook, status: :created, location: @notebook
      else
        render json: @notebook.errors, status: :unprocessable_entity
      end
    end

    def update
      if @notebook.update(notebooks_params)
        render json: @notebook
      else
        render json: @notebook.errors, status: :unprocessable_entity
      end
    end

    def destroy
      @spr_contract_solution.destroy
    end

    private
      def set_notebook
        @notebook = Notebook.find(params[:id])
      end

    def notebooks_params
      params.require(:notebook).permit!
    end
end

notebook.rb:

class Notebook < ApplicationRecord
    belongs_to :user
end

....__ create_notebooks.rb

class CreateNotebooks < ActiveRecord::Migration[5.1]
  def change
    create_table :notebooks do |t|
      t.string :title
      t.text :description
      t.boolean :is_active
      t.references :user, foreign_key: true

      t.timestamps
    end
  end
end

3 个答案:

答案 0 :(得分:2)

首先,@ Subash是正确的,您需要将参数列表传递给permit中的notebook_params方法(请注意,也许您想使用permit而不是{{ 1}}),例如:

permit!

然后,要回答您的问题,您可以在params.require(:notebook).permit :name, :text, :any_other_attribute_you_are_saving 操作中执行以下操作:

create

答案 1 :(得分:2)

假设您的用户模型中有has_many :notebooks,这是一种流行的习惯用法,可以用来做您想做的事情:

@notebook = current_user.notebooks.build(notebook_params)

答案 2 :(得分:0)

添加

@notebook.user = current_user

之后

@notebook = Notebook.new(notebooks_params)