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

Joh*_*ana 2 ruby-on-rails devise

我一直在玩这些模型.

我正在使用设计

我的架构:

  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
Run Code Online (Sandbox Code Playgroud)

投诉模式:

class Complaint < ActiveRecord::Base
  belongs_to :user

  validates :title, presence: true
end
Run Code Online (Sandbox Code Playgroud)

用户型号:

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
Run Code Online (Sandbox Code Playgroud)

我假设这是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
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?谢谢.

Sha*_*goz 7

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

@complaint = current_user.complaints.new(complaint_params)
Run Code Online (Sandbox Code Playgroud)