Можно ли как-то настроить параметры поля в rails activerecord? - PullRequest
0 голосов
/ 05 июля 2018

Я хочу добавить поле массива (именованные теги) в моей базе данных sqlite, поэтому я сделал несколько следующих шагов:

# migration
add_column :tags, :string

# controller
def update
  tags = params[:tags] # a array from frontend
  project.tags = tags.join(',')
  project.save!
end

def show
  project_hash = project.as_json
  project_hash['tags'] = project_hash['tags'].split(',')
  render json: project_hash
end

Но я хочу настроить параметры поля и метод получения напрямую в активной модели, как показано ниже:

# model
def tags=(array)
  self.real_tags_column = array.join(',')
end

def tag
  self.real_tags_column.split(',')
end

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Да, вы можете использовать атрибут сериализации Active record вместо настройки.

# Serialize a preferences attribute.
class User < ActiveRecord::Base
  serialize :preferences
end

# Serialize preferences using JSON as coder.
class User < ActiveRecord::Base
  serialize :preferences, JSON
end

# Serialize preferences as Hash using YAML coder.
class User < ActiveRecord::Base
  serialize :preferences, Hash
end

Пожалуйста, просмотрите ActiveRecord :: AttributeMethods :: Serialization :: ClassMethods & как сохранить массив в базе данных в рельсах

0 голосов
/ 05 июля 2018

Это должно работать так:

def tags
  self['tags'].split(',')
end

def tags=(array)
  self['tags'] = array.join(',')
end

Если нет, попробуйте read_attribute / write_attribute.

...