我一直在玩这些模特。
我正在使用设计
我的架构:
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
这是正确的方法吗?感谢。
答案 0 :(得分:7)
对于Rails自动设置外键,您需要通过父记录关联创建新记录。
@complaint = current_user.complaints.new(complaint_params)