Ruby on rails Rails 4:查找或创建方法
我在经验和公司之间有一种联系,公司有很多:经验和经验属于:公司,现在我想设计这个:如果用户输入的公司名称已经存在于公司模型中,它将分配给它,但是如果用户输入的公司名称已经不存在于公司模型中-公司必须持续存在,但不能创建为新记录,我不想使用find_或_create方法,find_by似乎对此不起作用处境 编辑 这是我的公司主管Ruby on rails Rails 4:查找或创建方法,ruby-on-rails,ruby,ruby-on-rails-4,associations,Ruby On Rails,Ruby,Ruby On Rails 4,Associations,我在经验和公司之间有一种联系,公司有很多:经验和经验属于:公司,现在我想设计这个:如果用户输入的公司名称已经存在于公司模型中,它将分配给它,但是如果用户输入的公司名称已经不存在于公司模型中-公司必须持续存在,但不能创建为新记录,我不想使用find_或_create方法,find_by似乎对此不起作用处境 编辑 这是我的公司主管 def allcompanies @companies = Company.paginate(page: params[:page], per_page: 10)
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
好的,所以你希望一些公司是可见的,而有些公司不是
然后,您可以创建一个相应的布尔字段,如public_visible,并为您不知道的公司(由应用程序用户创建)将其设置为false
在控制器中,执行以下操作:
@company = Company.find_by_name(params[:company][:name])
if @company.blank?
@company = Company.create(params[:company].merge({ public_visible: false }))
end
@company.experiences.create(...)
这只是一个例子,因为我不知道你们创建公司的真实情况,所以你们需要根据你们的需要进行调整。>公司必须持续,但不能创造新的记录-这是怎么回事?我不知道这就是为什么我要问,linkedin已经在这样做了,如果你在你的经验中输入了一个公司名称,而这个名称在他们的数据库中并不存在,那么这个公司将不会被创建。你怎么知道它不是在他们的数据库中创建的,你检查过了吗?可能它只是有一个字段名为like public_visible with false,用于该公司。这是一个好主意,但我如何知道一家公司是否是通过经验创建的,以执行类似的操作显示您当前的控制器操作以进行调整。我不知道你现在怎么做,所以不能告诉你要改变什么。我可以在我的经验模型中这样做吗@company=company.createparams[:company]。合并{public\u visible:false}end@djrs12如果它符合你的需要,为什么不呢?您并没有显示您的模型/控制器,所以我无法告诉确切的方式,只是如何执行-实现取决于您。我已经尝试过这一点,但在未初始化常量概要文件::体验时遇到此错误