СУХОЙ меня.Код Rails: - PullRequest
       11

СУХОЙ меня.Код Rails:

0 голосов
/ 09 ноября 2010

У меня есть несколько из них, где единственное, что отличается, это если это text_field или password_field и т. Д. И т. Д. И т. Д. Я хотел бы передать это как параметр для рендера, например: as =>: password_field, например. И я не хочу сравнивать регистр, передаваемое в поле: как значение поля. Возможно ли это?


.text{:class => form.object.errors[field].any? ? "error" : nil}
  = form.label field
  -if defined? value
    = form.text_field field, :value => value
  -else
    = form.password_field field 
  -if defined? hint
    %p#hint= hint
  = render 'shared/error_messages', :object => form.object, :field           

.text{:class => form.object.errors[field].any? ? "error" : nil}
  = form.label field
  -if defined? value
    = form.text_area field, :value => value
  -else
    = form.text_area field 
  -if defined? hint
    %p#hint= hint
  = render 'shared/error_messages', :object => form.object, :field => field 

Ответ приведен ниже, с некоторыми исправлениями:


-# expects form, field_name, field_type, value and hint variables to be passed
.text{:class => form.object.errors[field_name].any? ? "error" : nil}
  = form.label field_name
  - if defined?(value)
    = form.send(field_type, field_name, :value => value)
  - else
    /= form.send(:field_type, field_name)   
    = form.send(field_type, field_name)   
  -if defined? hint
    %p#hint= hint
  = render 'shared/error_messages', :object => form.object, :field => field_name        

Использование: = render 'shared/form_field', :form => f, :field_name => :email, :field_type => :text_field

Ответы [ 2 ]

1 голос
/ 10 ноября 2010

Создать частичную часть с именем shared/form_field.html.haml

- # expects form, field_name, field_type, value and hint variables to be passed
.text{:class => form.object.errors[field_name].any? ? "error" : nil}
  = form.label field_name
  - if defined?(value)
    = form.send(:field_type, field_name, :value => value)
  - else
    = form.send(:field_type, field_name)
  -if defined? hint
    %p#hint= hint
  = render 'shared/error_messages', :object => form.object, :field => field_name 

Вы можете вызвать частичное как

- form_for :user do |form|
 = render 'shared/form_field', :locals => {:form => form, 
                        :field_name => :login, :field_type => :text_field}
1 голос
/ 10 ноября 2010

Если я правильно понял ваш вопрос, вы после этого:

render :partial => 'user/login_errors', :locals => { :field => :first_name, :value => @user.first_name, :form => form }

Вы используете хеш local для передачи любого количества переменных. В вашем случае переменные в вашем фрагменте кода были form, field и value. Ключи в хэше определяют, на какую переменную будут ссылаться, как в частичном, а значения в хэше определяют значения переменных.

...