Как добавить отношение к существующему объекту в Rails - PullRequest
0 голосов
/ 07 января 2019

Я хочу добавить связь между существующим постом и автором.

Я пытался изменить атрибут created_by, но он недоступен из объекта.

def set_author
    if (@post.created_by.empty? && @post.author_code.present?)
      if @post.author_code == params[:author_code]
        @post.created_by = current_user
      else
        raise(ExceptionHandler::InvalidAuthorCode, Message.invalid_author_code)
      end
    else
      raise(ExceptionHandler::DisallowedAction, Message.action_not_allowed)
  end
end

Это не работает, потому что нет метода @post.created_by, даже если он присутствует в БД. Опубликовать модель из schema.rb

create_table "posts", force: :cascade do |t|
  t.string "title"  
  t.text "content"
  t.boolean "accepted", default: false
  t.string "created_by"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.string "author_code"
end

Edit: часть post.rb

  belongs_to :user, optional: true, foreign_key: :created_by

часть user.rb

  has_many :confessions, foreign_key: :created_by

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Я пытался обновить атрибуты @post неправильно. Изменено

@post.created_by = current_user

до

@post.update_attribute(:created_by, current_user)

и это работает. Это не пользовательская модель Devise, просто написанная самостоятельно.

0 голосов
/ 07 января 2019

Если предположить, что это произойдет только для @post, у которого нет created_by OR user, тогда вы можете использовать следующее:

@post.try(:created_by).blank? && @post.author_code.present?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...