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

时间:2015-04-24 23:04:37

标签: 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

投诉模型:

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

这是正确的方法吗?感谢。

1 个答案:

答案 0 :(得分:7)

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

@complaint = current_user.complaints.new(complaint_params)