есть ли способ использовать simple_form в show.html.erb

Я потратил значительное количество времени на создание формы в simple_form. У него было 96 полей! Я разделил форму на несколько шагов. Каждый шаг делается как частичный.

Теперь мне нужно подготовить форму для show.html.erb . Я думал, что рендеринг одних и тех же частей просто покажет форму пользователю, но, конечно, если я попытаюсь это сделать, это даст мне ошибку, например:

undefined local variable or method `f' for #<#<Class:0xb6d8712c>:0xb6d85f20>

Большинство моих частей имеют код, как показано ниже:

<%= f.input :name, :label=>"Preferred Name",:label_html => {:class => "form_label"}%>

Я просто пытаюсь использовать проделанную работу вместо того, чтобы снова кодировать все поля для show.html.erb

Есть ли какие-нибудь трюки, которые я могу использовать здесь?


person Omnipresent    schedule 06.05.2011    source источник
comment
Как вы решили это? Технически show.html.erb не нуждается в форме или полях ввода, поэтому simple_FORM не применяется. Однако часто вы хотите, чтобы представление отображало данные в виде меток, а затем метки превращаются в поля ввода, когда вы нажимаете «Изменить». Было бы неплохо, если бы simple_form предлагала способ рендеринга одного и того же партиала в режимах показа и редактирования.   -  person Mark Berry    schedule 03.03.2012
comment
@MarkBerry - взгляните на это: stackoverflow.com/a/64673778/1018996   -  person max kaplan    schedule 10.11.2020


Ответы (2)


Вы должны отправить переменную form_for компоновщика show.html.erb при рендеринге частичного:

#show.html.erb
<%= simple_form_for @something do |builder| %>
  <%= render :partial => 'somepartial', :locals => { :f => builder } %>
  ...
<% end %>

#_somepartial.html.erb
<%= f.input :name, :label=>"Preferred Name",:label_html => {:class => "form_label"} %>
person Zabba    schedule 06.05.2011
comment
отличный! это работает. однако данные отображаются внутри текстовых полей. это будет работать для моего edit.html.erb. Любой способ показать это как данные, а не текстовые поля, используя тот же частичный? - person Omnipresent; 06.05.2011
comment
Передайте { ... , locals => :some_variable => @something} и сделайте <%= some_variable.name %>. В качестве альтернативы, <%= f.object[:name] %> в частичном может работать (я не пробовал). Но лично я предпочитаю передавать переменную явно. - person Zabba; 06.05.2011
comment
Я не понял. вы имеете в виду изменить _somepartial.html.erb, чтобы иметь <%= some_variable.name%> вместо кода простой_формы ...<%= f.input :name, :label=>"Preferred Name"..., но это повлечет за собой изменение всего частичного. - person Omnipresent; 06.05.2011
comment
Что вы подразумеваете под показом данных, а не текстовых полей? В частичном редактировании, если вы хотите отобразить поле ввода, вы используете f.input, а если вы хотите отобразить поле без ввода, используйте somevariable.xx. Вам нужно будет изменить частичное для этого. Если вы хотите избежать этого по какой-либо причине, я полагаю, что можно использовать jQuery, чтобы предотвратить редактирование поля ввода, а затем использовать CSS, чтобы он выглядел так, как будто это не поле ввода. Почему бы просто не сделать это правильно с первого раза? - person Zabba; 06.05.2011
comment
Ok. Я видел, будет ли один и тот же фрагмент кода в частичном отображать поле ввода, когда запрашивается действие new, и отображать поле без ввода, когда запрашивается действие show. Но похоже, что мне нужны разные части для обоих. правильно? - person Omnipresent; 06.05.2011

Я столкнулся с той же проблемой.

Это может быть хакерское решение, но в пробке оно работает очень хорошо.

Это моя _form часть...

<%
disabled ||= false
%>
<%= simple_form_for incident_report do |f| %>
  <%= f.input :first_name,  disabled: disabled %>
  <%= f.input :last_name,   disabled: disabled %>
  <%= f.input :email,       disabled: disabled %>
  <%= f.input :phone,       disabled: disabled %>
  <% unless disabled %>
    <%= f.button :submit %>
  <% else %>
    Put show page content here!
  <% end %>
<% end %>

Я передаю переменную disabled, чтобы просто повторно использовать код формы и скрыть кнопку отправки.

Моя выставочная страница:

<%= render 'form', incident_report: @incident_report, disabled: true %>

Новая страница (как обычно..)

<h1>New Report</h1>
<%= render 'form', incident_report: @incident_report %>

Переключение между страницей редактирования и показа дает вам красивый согласованный пользовательский интерфейс.

Любая обратная связь очень ценится!

person max kaplan    schedule 04.11.2020