Mongoid, логические поля формы - PullRequest
0 голосов
/ 15 мая 2011

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

field :wizard, type: Boolean
field :archer, type: Boolean

Однако они могут быть только одной или другой, так как мне структурировать мои формы с помощью радиополей, чтобы пользователи могли выбирать только одну или другую, я не уверен, правильно ли я делаю это в своей форме скажи, что у меня будет что-то вроде:

<p><%= f.label "wizard" %><%= radio_button(:user, :wizard, "True") %></p>
<p><%= f.label "archer" %><%= radio_button(:user, :archer, "True") %></p>

Но это не работает, потому что вы можете выбрать столько элементов, сколько захотите. Как я могу запретить пользователю выбирать более одного радио выбора?

1 Ответ

1 голос
/ 15 мая 2011

Радиокнопки не совсем работают в разных полях HTML.Чтобы их можно было связать так, чтобы вы могли выбрать только один, они должны иметь одинаковое значение для атрибута name.Ваши генерируются со значениями имени «user.wizard» и «user.archer».Вам нужно что-то вроде:

<p><%= f.label "wizard" %><%= radio_button(:user, :role, "wizard") %></p>
<p><%= f.label "archer" %><%= radio_button(:user, :role, "archer") %></p>

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

В целом, я бы порекомендовал изменить ваши данныемодель, чтобы иметь роль в качестве строкового поля, или нормализовать и сделать role_id реальным полем, указывающим на отдельную таблицу, содержащую роли (user serve_to: role, role has_many: users).Таким образом, если вы добавите новую роль, вам не нужно будет менять код, просто добавьте строку в таблицу.Вы все еще можете иметь логические методы в модели User (например, user.is_wizard?), Но они будут рассчитываться на основе роли.

...