Как реализовать переключатели для конкретного сценария в Rails

#ruby-on-rails #forms #radio-button

#ruby-on-rails #формы #переключатель

Вопрос:

Я искал, но не нашел ответа, но я также не уверен, какие термины искать, поэтому, пожалуйста, укажите мне на похожие вопросы, если вы знаете о каких-либо.

Сценарий: У меня есть сообщения. У меня есть сторона администратора и общедоступная сторона. Я хочу, чтобы на главной странице общедоступной части отображался один пост.

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

Я просмотрел виртуальные атрибуты, но я не думаю, что это то, что мне нужно, или это так? Какой хороший способ выполнить то, что мне нужно?

Заранее всем спасибо.

Ответ №1:

Вы могли бы добавить «общедоступное» поле в свою модель posts и получить к нему доступ с помощью флажка в форме редактирования post. В вашем контроллере при создании или обновлении проверьте, имеет ли значение true значение общедоступного поля, если это так, то вам нужно будет запустить что-то вроде Post.update_all([‘public = ?’, false], [‘id!= ?’, current_post_id]), чтобы вернуть все существующие общедоступные записи обратно в частные.

В качестве альтернативы, вы могли бы создать простую модель для AppData (:id => : integer, :key => :string, :value => :string) и сохранить идентификатор выбранной в данный момент общедоступной записи в строке этой таблицы. Чтобы все было просто, вы захотите сериализовать поле :value в вашей модели. В этом случае вы бы использовали просто непривязанный тег checkbox_tag в вашем представлении и записали бы это значение из хэша параметров. Если этот флажок установлен, то вам нужно будет обновить строку AppData с новым идентификатором.

Комментарии:

1. Большое спасибо за ваш ответ! Я попробую это и посмотрю, как это работает.

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

3. В итоге я пошел по второму маршруту, который вы предложили выше. Спасибо за вашу помощь.