我在experience
和company
之间建立了关联,其中公司has_many :experiences
和体验belongs_to :company
,现在我想设计一个:如果用户输入的公司名称已经它将分配给它的公司模型中存在,但如果用户在公司模型中放置了公司名称 - 公司名称必须保留但不能创建为新记录(我不想要使用find_or_create
方法而find_by
似乎并不适用于这种情况)
修改
这是我的公司控制人员
def allcompanies
@companies = Company.paginate(page: params[:page], per_page: 10).order("created_at DESC")
end
def show
@company = Company.find_by_slug(params[:id])
if @company
render action: :show
else
render file: 'public/404', status: 404, formats: [:html]
end
end
def index
@companies = Company.limit(19).order("id DESC")
end
def new
@company = Company.new
end
def edit
end
def create
@company = Company.new(company_params)
respond_to do |format|
if @company.save
flash[:notice] = "Entreprise '#{@company.name}' Crée!"
format.html { redirect_to @company}
else
format.html { render action: 'new' }
end
end
end
def update
respond_to do |format|
if @company.update(company_params)
flash[:notice] = "Entreprise '#{@company.name}' à été mis à jour"
format.html { redirect_to @company }
else
format.html { render action: 'edit' }
end
end
end
def destroy
@company.destroy
respond_to do |format|
format.html { redirect_to companies_url }
end
end
private
def set_company
@company = Company.find_by_slug(params[:id])
end
def company_params
params.require(:company).permit(:name, :company_description, :country, :city, :company_status, :company_size, :company_website, :sector_ids, :job_id, :companylogo)
end
这是我的经验模型,实际上为每个公司创建了一条新记录
belongs_to :profile
belongs_to :company
validates :company_name, presence: true
def company_name
company.try(:name)
end
def company_name=(name)
self.company = Company.find_or_initialize_by(name: name)
end
答案 0 :(得分:0)
好的,所以你想要一些companies
可见而有些则不可见。
然后,您可以创建相应的boolean
字段,例如public_visible
,并为false
设置您不知道的companies
(即由应用程序用户创建)
在您的控制器中执行以下操作:
@company = Company.find_by_name(params[:company][:name])
if @company.blank?
@company = Company.create(params[:company].merge({ public_visible: false }))
end
@company.experiences.create(...)
这只是一个例子,因为我不了解公司创建的真实情况,所以你需要根据自己的需要进行调整。