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)
这是正确的方法吗?谢谢.
对于Rails自动设置外键,您需要通过父记录关联创建新记录.
@complaint = current_user.complaints.new(complaint_params)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
786 次 |
| 最近记录: |