Ruby on rails Rails 4:查找或创建方法

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)

我在经验和公司之间有一种联系,公司有很多:经验和经验属于:公司,现在我想设计这个:如果用户输入的公司名称已经存在于公司模型中,它将分配给它,但是如果用户输入的公司名称已经不存在于公司模型中-公司必须持续存在,但不能创建为新记录,我不想使用find_或_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
好的,所以你希望一些公司是可见的,而有些公司不是

然后,您可以创建一个相应的布尔字段,如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如果它符合你的需要,为什么不呢?您并没有显示您的模型/控制器,所以我无法告诉确切的方式,只是如何执行-实现取决于您。我已经尝试过这一点,但在未初始化常量概要文件::体验时遇到此错误