Я пытаюсь реализовать некоторую уникальность в моей базе данных с возможностью замены текущего значения, если оно уже находится в базе данных.Как реализовать запись if есть перезаписать базу данных рельсов
Моя таблица выглядит
t.integer "task_id"
t.integer "accessor_id"
t.integer "access_owner"
t.boolean "access_rights"
и я хочу, чтобы проверить, что если есть запись с TASK_ID, accessor_id и access_owner, чем обновление access_right, и если есть не один создать такую запись
мой текущий метод создания и новый метод является
class AccessorsController < ApplicationController
def new
@accessor = Accessor.new
@task_id = params[:task_id]
end
def create
@accessor = Accessor.new(accessor_params)
@user = User.where(email: params[:accessor][:accessor_id]).first
@accessor.accessor_id = @user.id
@accessor.access_owner = current_user.id
respond_to do |format|
if @accessor.save
format.html { redirect_to Task, notice: 'User was successfully created.' } #
format.json { render action: 'show', status: :created, location: Task }#
else
format.html { render action: 'new' } #
format.json { render json: @accessor.errors, status: :unprocessable_entity }#
end
end
end
Я попытался сделать следующее
@accessor = Accessor.where("access_owner = ? AND accessor_id = ? AND task_id = ?", current_user.id, User.where(email: params[:accessor][:accessor_id]).first,params[:task_id]).first || Accessor.new(accessor_params)
, но это не сработало
будет ли это быть добавлены до сохранения? или он заменит некоторые из моих методов? – Quantico
См. Мое редактирование – Quantico
update_attributes сохраняет запись. Вы можете просто установить атрибут сначала, а затем сохранить его. \ @ accessor.access_rights = params [: access_rights] \ @ accessor.save Я обновлю свой ответ с помощью метода создания, который у вас будет. – iouri