Как я могу сохранить поле как другое поле в другой таблице? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть функция аутентификации, которая предоставляет мне имя пользователя текущего пользователя.У меня также есть таблица событий (созданная пользователями).И когда пользователь создает событие, как я могу сохранить поле с именем host с текущим именем этого пользователя в таблице событий?

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Или, если ваш Event не belongs_to :user, вам нужно будет обновить это вручную в контроллере следующим образом

class EventsController < ApplicationController
  def create
    @event = Event.new
    @event.assign_attributes(event_params)
    @event.host = current_user.username

    if @event.save
      # success, do something UPDATE THIS
    else
      # validation errors, do something UPDATE THIS
    end
  end

  def update
    @event = Event.find(params[:id])
    @event.assign_attributes(event_params)
    @event.host = current_user.username

    if @event.save
      # success, do something UPDATE THIS
    else
      # validation errors, do something UPDATE THIS
    end
  end

  private

  def event_params
    params.require(:event).permit(:someattribute1, :someattribute2) # etc. UPDATE THIS
  end
end
1 голос
/ 11 июня 2019

Концепция называется "десериализация", поэтому я сделал для этого свой собственный драгоценный камень: quickery.

Использование quickery

class Event < ApplicationRecord
  belongs_to: user

  quickery { user: { username: :host } }
end

Использование Normal-Way

class Event < ApplicationRecord
  belongs_to :user

  before_save do
    host = user.username
  end
end

class User < ApplicationRecord
  has_many :events

  # you may want to comment out this `after_destroy`, if you don't want to cascade when deleted
  after_destroy do
    events.update_all(host: nil)
  end

  # you may want to comment out this `after_update`, if you don't want each `event.host` to be updated (automatically) whenever this `user.username` gets updated
  after_update do
    events.update_all(host: username)
  end
end

Пример использования (для любого из вышеперечисленных)

user = User.create!(username: 'foobar')
event = Event.create!(user: user)
puts event.host
# => 'foobar'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...