我(非常)对ror很新,并且已经阅读了很多这个问题的教程,但似乎都没有。我试图让一个用户创建一个摊位来销售东西。
这是我的数据库迁移:
class CreateBooths < ActiveRecord::Migration
def change
create_table :booths do |t|
t.string :name
t.references :user, index: true
t.timestamps null: false
end
add_index :booths, [:user_id]
end
end
这是展台控制器:
class BoothsController < ApplicationController
before_action :logged_in_user
def new
@booth = Booth.new
end
def create
@booth = current_user.booths.build(booth_params)
if @booth.save
flash[:success] = "Congrats on opening your booth!"
redirect_to root_url
else
render 'new'
end
end
private
def booth_params
params.require(:booth).permit(:name)
end
end
这是展台模型:
class Booth < ActiveRecord::Base
belongs_to :user
validates :user_id, presence: true
end
我还将此添加到用户模型中:
has_one :booth, dependent: :destroy
当我包含validates :user_id, presence: true
时,它不会保存到数据库。当我将其排除时,它会保存,但不包括数据库中的用户ID。如果您还在阅读谢谢,我希望您能提供帮助!
答案 0 :(得分:1)
您需要将create
的{{1}}方法更改为:
BoothsController
在这里,您在用户和展位之间建立了一对一的关联,这就是为什么您必须使用def create
@booth = current_user.build_booth(booth_params)
if @booth.save
flash[:success] = "Congrats on opening your booth!"
redirect_to root_url
else
render 'new'
end
end
为booth
实例化current_user
的原因,build_<singular_association_name>
{1}}并将params传递给它:build_booth
。
build_booth(booth_params)
适用于一对多关联,例如:用户有很多摊位,反之亦然。