2015-01-17 2 views
0

У меня есть связь между experience и company где компания has_many :experiences и опыт belongs_to :company, сейчас я хочу создать: если пользователь вводит название компании, которые уже существуют в модели компании она присвоит но если пользователь поставил название компании, которое еще не существует в модели компании - компания должна сохраняться, но не создаваться как новая запись (я не хочу использовать метод find_or_create, а find_by не работает для эта ситуация)Rails 4: найти или создать метод

Редактировать

это мой контроллер компании

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 
+1

> Компания должна сохраняться, но не создаваться в качестве новой записи - как это? –

+0

Я не знаю, почему я спрашиваю, а linkin уже делает это, если вы положите на свой опыт название компании, которое не существует в их db, эта компания не будет создана –

+0

, откуда вы знаете, что это isn Создано в их db, вы проверили? Возможно, это поле имеет название 'public_visible' с' false' для этой компании. –

ответ

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(...) 

это просто пример, так как я не знаю ваших реальных условий по созданию компаний, так что вам нужно настроить его в соответствии с вашими потребностями.

+0

Могу ли я сделать что-то подобное в моей модели опыта, если company.new_record? @company = Company.create (params [: company] .merge ({public_visible: false})) end –

+0

@ djrs12, если это соответствует вашим потребностям - почему бы и нет? Вы не показывали свои модели/контроллеры, поэтому я не могу точно сказать, просто _how_ для этого - реализация зависит от вас. –

+0

Я пробовал это, но я получаю эту ошибку неинициализированной постоянной Профиль :: Опыт –

Смежные вопросы