Как я могу реализовать это в Rails? - PullRequest
0 голосов
/ 02 марта 2012

Я хочу реализовать функцию, при которой пользователь может «добавить дополнительные данные» в свой профиль.Здесь он должен иметь возможность создать метку для детали и фактические детали, такие как:

Education : Degree 

, где образование - метка для детали, а степень - деталь.

Помимо этогоОн также должен иметь возможность решить, следует ли указывать эти детали visible или hidden.

. Как я могу реализовать это, используя профиль новой модели с ассоциацией Профиль пользователя has_one.

Если бы у меня были только метка и текст для новых деталей, я мог бы попробовать hash, но, поскольку мне также пришлось бы получать подробности от пользователя о том, хочет ли пользователь скрыть деталиили видимый, мне может потребоваться дополнительное поле для хранения этого значения (true или false).

Я действительно смущен тем, как я могу реализовать все это вместе.

Пожалуйста, предложите мне, как я могу реализовать это, а также как я могу обновлять модель каждый раз, когда пользователь создаетновая деталь без изменения schema в БД.

Я работаю над Rails 3.2.

Ответы [ 2 ]

2 голосов
/ 02 марта 2012

Я не вижу вашей проблемы (или не понимаю), но:

Почему бы вам просто не создать has_many AdditionalData с user_id:integer name:string content:string visible:boolean?

Таким образом, вы можете перебирать @user.additional_datas.visible (при условии, что вы определили область действия scope :visible, where("visible = 1").

Дополнительное преимущество: вы можете сделать эту модель полиморфной и добавить дополнительную информацию к другим вещам, которые есть в вашемприложение без необходимости создавать дополнительную «информационную» таблицу для каждой модели, в которой вы хотите их хранить.

Для проверки вы также можете добавить поле data_type и создать проверки в соответствии с типом данных (необходимобыть URL, номер телефона, просто текст, ...)

1 голос
/ 02 марта 2012

Я тоже не вижу проблемы; Я думаю, что хеш-подобная таблица могла бы быть решением, что-то вроде этого:

rails generate model UserDetails label:string value:string \
  visible:boolean user:references

, в который вы помещаете записи следующим образом:

user.details.create(:label => 'Dog name', :value => 'Fuffy' :visible => false)
...