如何将当前的 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)
我一直在玩模型。
我正在使用设计
我的架构:
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)