2016-08-22 17 views
0

Я хочу иметь две колонки типа :boolean, скажем X и Y, где Y частично зависит от X. Когда X истинно, Y может быть либо истинным, либо ложным, но когда X является ложным, Y должен быть ложным. Это возможно?Столбец таблицы частично зависит от другого столбца?

class AddPrivacyColumnsToPosts < ActiveRecord::Migration 
    def change 
    add_column("posts", "public", :boolean, :default => true) 
    add_column("posts", "collectable", :boolean, :default => true) 
    end 
end 

, где находится public Х и Y представляет collectable, то есть только общедоступные сообщения могут быть собраны. Если сообщение установлено в приватное (когда public является ложным), то collectable автоматически устанавливается в значение false.

+0

Да, это возможно. Есть много способов добиться этого, но я не уверен, что вы ищете. У вас есть код, над которым вы работали? – kcdragon

+0

@kcdragon Просто обновил вопрос с помощью кода из файла миграции – Arif

+0

Вы спрашиваете, как это сделать? – kcdragon

ответ

2

Я хотел бы добавить, прежде чем сохранить перезвоним сообщение

before_save :set_collectable 

def set_collectable 
    if !public? 
    self.collectable = false 
    end 
end 
+0

Спасибо! Поскольку вы упомянули, что есть несколько способов сделать это, просто из любопытства ... каковы другие способы сделать это? – Arif

+1

Вы можете добавить триггер базы данных, но они слишком часто не используются в Rails. Вы также можете использовать слушатели, такие как wisper или observer, для установки коллекционирования вместо прямого использования обратных вызовов. Но я думаю, что в ответе ваш лучший выбор – kcdragon

Смежные вопросы