Rails: идентификатор области видимости в дополнение к первичному идентификатору - PullRequest
1 голос
/ 01 сентября 2009

Скажите, что у меня много блогов, и каждый блог has_many сообщений. Они хранятся в 2 таблицах («блоги» и «сообщения»). Можно ли добавить дополнительный столбец (например, scoped_id) в таблицу блогов, в которой хранится идентификатор, ограниченный областью блога.

Пример

 Blog: 1
  - Posts
    - id: 1, scoped_id: 1
    - id: 2, scoped_id: 2
    - id: 3, scoped_id: 3
 Blog: 2
  - Posts
    - id: 4, scoped_id: 1
    - id: 5, scoped_id: 2
    - id: 6, scoped_id: 3

Я знаю, что counter_cache может отслеживать количество публикаций в родительском блоге. Тем не менее, я не хочу, чтобы значение scoped_id уменьшалось, если пост уничтожен.

Ответы [ 2 ]

1 голос
/ 01 сентября 2009

Лучше всего было бы сохранить последний использованный идентификатор в блоге и заполнить его с помощью:

class Post < ActiveRecord::Base
  …
  before_create :populate_scoped_id

  def populate_scoped_id
    blog.increment!(:latest_scoped_post_id)
    self[:scoped_id] = blog.latest_scoped_post_id
  end
  …
end

или что-то в этом роде.

Если сохранение не удастся, счетчик не будет увеличен, потому что все это в колоссальной великой транзакции (это, например, полностью корпоративное).

1 голос
/ 01 сентября 2009

да, вы определенно можете добавить еще один столбец, и если это я, я бы сделал обратный вызов before_save для сохранения scoped_id , если это new_record?

class Post < ActiveRecord::Base
  ...
  before_save :populate_scoped_id

  def populate_scoped_id
    assign_the_scoped_id_method if self.new_record?
  end
  ...
end

надеюсь, это поможет =)

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