изменить поведение Create, если существует запись с таким же атрибутом - PullRequest
0 голосов
/ 25 января 2019

Я создаю приложение вроде reddit, в котором вы добавляете представление на определенную пользовательскую страницу . Отправка имеет несколько атрибутов, включая атрибут с именем url . Я хочу проверить при добавлении нового представления, существует ли уже представление с тем же URL-адресом для этой конкретной страницы, и, если оно существует, голосовать за него, а не создавать его как новое представление. Если нет, просто добавьте его в качестве нового представления. Я использую камень act_as_votable здесь.

Вот метод создания:

def create
    @user = User.friendly.find(params[:user_id])
    @submission =  @user.submissions.new(submission_params)
    @submission.member_id = current_user.id
    @submission.creator_id = @user.id
    @submission.is_viewed = false
    @submission.get_thumb_and_title_by_url(@submission.url)
    respond_to do |format|
       if @submission.save

        format.html { redirect_to @user, notice: 'Submission was 
 successfully created.' }
        format.json { render :show, status: :created, location: @submission }
       else
           format.html { render :new }
           format.json { render json: @user.errors, status: :unprocessable_entity }
       end
     end
  end

1 Ответ

0 голосов
/ 12 апреля 2019

Вы должны взглянуть на https://apidock.com/rails/v4.0.2/ActiveRecord/Relation/find_or_create_by и https://apidock.com/rails/v4.0.2/ActiveRecord/Relation/find_or_initialize_by

Теперь в вашем коде мы можем вносить изменения как

def create
    @user = User.friendly.find(params[:user_id]) 
    @submission =  @user.submissions.find_or_initialize_by(submission_params)
    if @submission.id.present? 
      # What to do if the record exists 
    else
      # if its a new record 
      @submission.member_id = current_user.id
      @submission.creator_id = @user.id
      @submission.is_viewed = false
      @submission.get_thumb_and_title_by_url(@submission.url)
    end


    respond_to do |format|
       if @submission.save

        format.html { redirect_to @user, notice: 'Submission was 
 successfully created.' }
        format.json { render :show, status: :created, location: @submission }
       else
           format.html { render :new }
           format.json { render json: @user.errors, status: :unprocessable_entity }
       end
     end
  end

Я надеюсь, что это может поставить вас на правильный путь

Счастливое кодирование

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...