如何将当前的 user_id 自动添加到另一个 table?

how to add the current user_id automatically to another table?

我一直在玩模型。

我正在使用设计

我的架构:

  create_table "complaints", force: :cascade do |t|
    t.string   "title"
    t.text     "complaint_info"
    t.datetime "created_at",     null: false
    t.datetime "updated_at",     null: false
    t.integer  "user_id"
  end

  add_index "complaints", ["user_id"], name: "index_complaints_on_user_id", using: :btree

  create_table "users", force: :cascade do |t|
    ...
  end

投诉模型:

class Complaint < ActiveRecord::Base
  belongs_to :user

  validates :title, presence: true
end

用户模型:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_many :complaints
end

我假设这是 rails 的设置,假设 current_user id 进入 user_id 但它没有存储它,我必须在控制器中手动完成像这样:

def create
    @complaint = Complaint.new(complaint_params) do |c|
      c.user_id = current_user.id
    end

    if @complaint.save
      redirect_to dashboard_complaint_path(@complaint)
    else
      render 'new'
    end
  end

private

  def complaint_params
    params.require(:complaint).permit(:title, :complaint_info)
  end

这样做正确吗?谢谢。

要Rails自动设置外键,您需要通过父记录关联创建新记录。

@complaint = current_user.complaints.new(complaint_params)