2010-07-09 13 views
7

Quiero tener un modelo Status que será relativamente estático después de alguna configuración definida por el usuario (y diferentes usuarios pueden tener diferentes valores en el estado).¿Debo usar has_one o belongs_to en ruby ​​on rails?

El estado puede aplicarse a diferentes modelos, como Contact y Event.

por lo que los estados devueltos por contact.status serán diferentes de event.status

Quiero diseñar la aplicación para que la tabla de estado tiene diferentes tipos (contacts y events).

¿Cuál es la estrategia y el formato correctos para esto?

Estoy pensando en declarar en el modelo :has_one StatusContact, y almacenar una :status_id en la tabla :contacts. Ídem con Event.

:statuses tabla tendrá el valor de estado, tipo y fecha.

¿Tiene esto sentido? ¿Puedes sugerir un mejor enfoque?

Respuesta

7

Hay una pregunta muy guide on this. Su situación es ligeramente diferente, ya que parece que su modelo de Estado realmente necesita ser polimórfico, ya que las cosas diferentes serán "reconocibles".

Para responder a su pregunta, Contact/Event has_one El estado tiene sentido para mí.

+1

mi modelo de estado es polimórfico .... Lo edité arriba .... Me pregunto si debería hacer las cosas simples ya que parece ser difícil buscar en él ... más difícil de lo que pensaba – Angela

1

En primer lugar, la relación has_one no almacena una identificación en el modelo actual. Busca una clave externa en la tabla relativa. Para almacenar un status_id en Contactos o Eventos, debería usar belongs_to.

En segundo lugar, dependiendo del tipo de información que está almacenando en Estado, ¿por qué tiene que ser su propia tabla por separado? ¿Por qué no crear una columna de estado en cada modelo en el que quiera usar el estado? Un poco más de información puede ser útil aquí.

+1

Bueno ... podría ser. Parecía que había visto la configuración de ERD donde ciertos atributos que estaban bastante estandarizados tendían a ser tablas separadas. Como como mencioné anteriormente, los valores de estado no cambian mucho, parecía que ese sería el tipo de cosas en su propia tabla, especialmente dado que estará disponible como un menú desplegable o autocompletar como un atributo. – Angela

2

Simplemente para completar la respuesta en un entorno más general, que puede elegir: belongs_to asociación se utiliza en el modelo que tiene la clave externa.

+0

esto no es cierto . la clave externa también se puede usar en un has_many, cuando no se puede inferir la asociación. – sabaeus