Rails 4 - Рендеринг различных частей формы в новом действии из new.js.erb - PullRequest
0 голосов
/ 30 августа 2018

В моем приложении у меня есть модель Post. Когда пользователь добавляет сообщение, он может выбрать 4 различных типа сообщения. По сути, каждый тип имеет различные поля в форме.

* Например: Тип 1 имеет только изображения, Тип 2 имеет только описание, Тип 3 имеет только заголовок, а Тип 4 имеет все активные поля.

В настоящее время, когда пользователь нажимает на Добавить новое сообщение , ему нужно выбрать тип сообщения (из модуса начальной загрузки) , и я добавлю param type к ссылке и это будет добавлено к:

= f.hidden_field :post_type, value: params[:type]

По моему posts#new У меня есть:

- if params[:type].present?
  - if params[:type].to_i == 1
    = render 'posts/form_partials/only_image'
  - elsif params[:type].to_i == 2
    = render 'posts/form_partials/only_description'
  - elsif params[:type].to_i == 3
    = render 'posts/form_partials/only_title'
  - elsif params[:type].to_i == 4
    = render 'posts/form_partials/all_fields'

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

Я пытался получить new.js.erb, но он вообще не срабатывает.

## PostsController#new
def new
  @post = Post.new

  respond_to do |format|
    format.html
    format.js
  end
end

## new.js.erb (testing if I get contact)
$('button').click(function(){
  console.log("New Action fired up");
});

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

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 28 января 2019

Лучшее решение для этого - добавить 4 различных partials в ваш view и сделать это в вашем контроллере:

- if params[:type].present?
  - if params[:type].to_i == 1
    = render 'posts/form_partials/only_image'
  - elsif params[:type].to_i == 2
    = render 'posts/form_partials/only_description'
  - elsif params[:type].to_i == 3
    = render 'posts/form_partials/only_title'
  - elsif params[:type].to_i == 4
    = render 'posts/form_partials/all_fields'

и визуализируйте правильные партиалы в вашем new представлении

...