Как сохранить идентификатор пользователя, который редактировал запись - Rails - PullRequest
0 голосов
/ 27 сентября 2019

Я хочу сохранить идентификатор пользователя, который редактировал статью в моей заявке.Я использую гем Devise.

вот метод обновления в контроллере статьи

def update
    @article = Article.find(params[:id])
    updated = @article.update(article_params) do |article|
      article.editor_id = current_user.id
    end

    if updated
      format.html { redirect_to @article, notice: 'Article was successfully updated.' }
      format.json { render :show, status: :ok, location: @article }
    else
      format.html { render :edit }.s: :unprocessable_entity }
    end
end

процесс обновления прошел успешно, но он не сохранил идентификатор пользователя.И плюс, как сохранить идентификатор пользователя, только если содержание статьи изменилось?Любой совет?

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

с направлением от @sujan, я изменяю свой код на это.Я удаляю переменную обновления, чтобы сделать ее более простой

   def update

        @article.assign_attributes(article_params)   

        if  @article.content_changed?
           @article.editor_id = current_user.id    
        end

        respond_to do |format|
          if @article.save
            format.html { redirect_to @article, notice: "Article succesfully updated" }
            format.json { render :show, status: :ok, location: @article }
          else
            format.html { render :edit }
            format.json { render json: @article.errors, status: :unprocessable_entity }
          end
        end
0 голосов
/ 27 сентября 2019

Я думаю, вам следует проверить, действуют ли версии: https://github.com/technoweenie/acts_as_versioned

Другой способ заключается в том, что вы создаете для него другую модель, которая будет регистрировать изменения и кто их делал.Как ArticleLog (article_id, user_id, updated_attr, prev_val).

Создать хук для создания ArticleLog при обновлении Article, если атрибут, который вы хотите зарегистрировать, был изменен.

https://guides.rubyonrails.org/active_record_callbacks.html#updating-an-object

Надеюсь, я тебе помог!:)

0 голосов
/ 27 сентября 2019

Вам необходимо сохранить статью после присвоения editor_id.Попробуйте,

updated = @article.update(article_params) do |article|
  article.editor_id = current_user.id
  article.save
end

или лучше,

updated = false
@article.assign_attributes(article_params)
if @article.changed?
  @article.editor_id = current_user.id
  updated = @article.save
end

Это обновит статью, только если есть изменения.

Refs:

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