Общая форма Rails для конструктора форм Braintree

У меня есть похожая форма:

    <%= form_for :customer,
  :params => @result && @result.params[:customer],
       :errors => @result && @result.errors.for(:customer),
       :builder => BraintreeHelper::BraintreeFormBuilder,
       :url => Braintree::TransparentRedirect.url,
       :html => { :autocomplete => "off"} do |f| -%>
      First name: <%= f.text_field :first_name , :value => "John"%><br />
      <%= f.submit %>
    <% end %>

Когда я пытаюсь добавить значение в это текстовое поле, оно меня не пускает. Однако, если я возьму билдер из тега form_for, я смогу это сделать. Кто-нибудь имел опыт работы с конструктором форм Braintree?


person Hommer Smith    schedule 10.04.2012    source источник


Ответы (2)


Сивэй Шен на правильном пути...

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

Пример построителя форм, который вы нашли в примере приложения Braintree Rails, предоставляет некоторые полезные вещи, поскольку формы TR отправляются непосредственно в наш шлюз, а не в ваше приложение, и предоставляет имена атрибутов полей формы и значения по умолчанию, которые ожидает шлюз Braintree, а также помогает заполнить ошибки проверки, которые возвращаются в ваше приложение.

В этом конкретном случае построитель форм в конечном итоге объединяет значения для входных данных (включая :first_name) либо с существующим значением (если есть), либо с nil (перезаписывая то, что вы передали.

https://github.com/braintree/braintree_ruby_examples/blob/master/rails_tr_checkout/app/helpers/braintree_form_builder.rb#L22

Не стесняйтесь изменять конструктор форм в соответствии с вашими потребностями!

person cosgroveb    schedule 13.04.2012
comment
Это именно то, что я искал. Как бы я переопределил это из своего приложения? - person Hommer Smith; 14.04.2012

при использовании "form_for" значением по умолчанию является значение объекта формы. например

@person = Person.new(:first_name => "Jack")

<%= form_for :person do |f| %>
  <%= f.text_field :first_name %>  
<% end %>

и вы получите ввод текста со значением по умолчанию «Джек»:

<input type="text" value="Jack"/>

поэтому при использовании f.text_field вы не можете установить значение по умолчанию, если только вы не измените объект формы (здесь @person).

Если вы хотите установить значение по умолчанию, я предлагаю вам либо использовать «form_tag», который не имеет «объекта формы», либо использовать jQuery для реализации значения по умолчанию.

person Siwei    schedule 10.04.2012
comment
Я не использую какой-либо объект @person в своем контроллере... Я заполняю свою форму в другой службе. Я обновил свой вопрос. Извините за путаницу - person Hommer Smith; 11.04.2012
comment
затем используйте form_tag, а не form_for. - person Siwei; 11.04.2012
comment
Я могу использовать form_for для общих видов. Посмотрите на общую форму здесь: api.rubyonrails.org /классы/ActionView/Помощники/ - person Hommer Smith; 11.04.2012