#html #ruby-on-rails #ruby #forms #simple-form
#HTML #ruby-on-rails #ruby #формы #simple-form
Вопрос:
Всякий раз, когда я использую simple_form_for(), по умолчанию используется «my_subclasses_path», а не «my_base_classes_path». Как я могу сказать ему, чтобы он не использовал подкласс?
В моем случае у меня есть объект User, но также и множество подклассов. Я хочу использовать стандартные пользовательские URL-адреса, поскольку все подклассы работают одинаково для этих форм.
Кроме того, я хочу запретить simple_form называть свойства после подкласса. Например, если подклассом является «Admin», я хочу, чтобы отправленные параметры были «params[:user]», а не «params[:admin]».
Я нахожу приведенное выше ДЕЙСТВИТЕЛЬНО странным, потому что в форме на самом деле написано «user [first_name]», а НЕ «admin [first_name]» — но simple_form, похоже, все равно хочет сделать его параметром [:admin].
По сути, подклассы приводят к неправильному поведению simple_for. Хотелось бы, чтобы была такая опция, как
base_class => 'User'
Это позволило бы обрабатывать все эти вещи.
Комментарии:
1. Мне все еще нужна помощь с этим. На самом деле это сводит меня с ума. Например, если вы администратор, который является подклассом user, а затем перейдите к редактированию вашего профиля… предполагается, что вам нужны параметры [: admin], а не параметры [:user]. Очевидно, что это действительно дерьмово, потому что это будет отличаться для всех типов пользователей в вашей системе.
Ответ №1:
Если вы передадите параметр:url, как предлагает рафаэль Франка, вместе с параметром :as, он должен работать правильно. Например:
simple_form_for(@admin, :url => user_path(@admin), :as => :user)
Это дает мне правильное действие формы и параметры (например, user [имя] вместо admin [имя]).
Ответ №2:
Передайте :url
опцию simple_form_for
.
например.: simple_form_for(@admin, :url => users_path)
Комментарии:
1. К сожалению, этого недостаточно. Он все равно попытается присвоить всем свойствам имя admin[first_name] вместо user [first_name]
2. Используйте конструктор форм rails по умолчанию и посмотрите, решит ли это вашу проблему