Передача значения из родительской модели в Rails - PullRequest
0 голосов
/ 11 марта 2020

Я использую Ruby на Rails 5.2.3, Mongoid и Devise

У меня есть две модели, и мне нужно передать значение button_color из родительской модели

user.rb

class User
  include Mongoid::Document

  field :button_color, type: String, default: '#FFFFFF'

  has_many :items, dependent: :destroy

end

item.rb

class Item
  include Mongoid::Document

  field :button_color, type: String
  belongs_to :user, touch: true
end

Мне нужно получить что-то вроде

поле: button_color, тип: String, по умолчанию: current_user.button_color

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

ПРИМЕЧАНИЕ: Я предполагаю, что current_user в вашем вопросе правильно устанавливается для объекта Item как item.user.

Подход 1

Попробуйте установить параметр default для лямбды для этого поля:

class Item
  include Mongoid::Document

  field :button_color, type: String, default: -> { user&.button_color }

  belongs_to :user, touch: true
end

Подход 2

Если указанное выше не работает, вы можете добавить обратный вызов для установки button_color, если для него не было установлено другое значение:

class Item
  include Mongoid::Document

  field :button_color, type: String # default `nil`

  belongs_to :user, touch: true

  before_validation :set_button_color

  private

  def set_button_color
    self.button_color ||= user&.button_color
  end
end
0 голосов
/ 11 марта 2020
class Item
  belongs_to :user

  delegate :button_color, to: :user
end

Затем можно вызвать button_color для любого экземпляра Item.

puts item.button_color

См. делегат документы.

...