Що до форм, то тут також багато цікавого оскільки розрізняють два види хелперві для роботи з формами: -скелетні хелпери, - модельні хелпери. Почну я з простішого, скелетної форми, а саме це форма з допомогою "form_tag":
<%= form_tag({controller=>:user, :action => :personal}, :method=>:get, :id=>'clsdd') do %>
<%= label_tag(:user, 'title for text user ', :id=>'id')%>
<%= text_field_tag(:user, 'text')%>
<%= text_area_tag(:message, "Hi, nice site", :size => "24x6") %>
<%= submit_tag(:go)%>
<% end %>
form_tag - приймає першим параметром урл на який буде відселати форму, якщо ви задаєте його рядком символів то все нормальн, а якщо хешем то потрібно відділити як окремий параметер. Далі предаються інші параметри в вигляді продовження хеша, воним можуть бути і опущені. Все що знаходиться в середині "form_tag" є хелперами для формування тегів форми.
Назви елементів форми є логічними, а закінчення на "_tag" вказує що це простий елемент, першим параметром зазвичай іде ім'я поля, потім значення, і далі можна вказувати додаткові параметри, значення також можна конкретно задати винісши в ":value=> 'значення'";
Також є більш спеціальні хелпери(модельні) для формування полів, вони більш привязані до моделі і приймають два значення для імені поля формуючи назву як масив, до прикладу
<%= email_field(:user, :address) %>
сформує поеле з назвою "user[address]", після чого даний масив можна вже зберігати. В таких хелперах опущене закінчення "_tag", але вони можуть використовуватись і для "form_tag".
Наступний є метод формування форми є використання form_for, превага над попереднім в тому що ми привязуємось до конкретної моделі і не потрібно викоритсовувати надлишкове формування масивів для привязки оскільки вони будуть генеруватись автоматично і нам потребіно тільки вказувати назву поля що відповідає полю моделі тому хелпери такого методу ще називаються модельними.
Для використання такого методу потрібно ініціювати змінну моделі: @user = User.new
<%= form_for @user, :url => { :action => "index" }, :html => {:class => "nifty_form"} do |f| %>
<%= f.text_field :firstname %>
<%= f.text_field :surname %>
<%= f.submit "Create" %>
<% end %>
в даному випадку все я думаю зрозуміло, хочеться тільки наголосити що якщо в нас немає в моделі такого поля як "firstname" то буде згенерована помилка оскільки такого виду форма є чітко привязаною. Також для заповнення фоми залежної моделі ми можемо використати fields_for, для чого ми тільки вказуємо привязку з залежною моделлю:
<%= form_for @user, :url => { :action => "index" }, :html => {:class => "nifty_form"} do |f| %>
<%= f.text_field :firstname %>
<%= f.text_field :surname %>
<%= fields_for @user.detail do |contact_form| %>
<%= contact_form.text_field :phone_number %>
<% end %>
<%= f.submit "Create" %>
<% end %>
Якщо ви нормально налаштували роутинг, то мжете не вказувати чітко значення урл.
<%= form_tag({controller=>:user, :action => :personal}, :method=>:get, :id=>'clsdd') do %>
<%= label_tag(:user, 'title for text user ', :id=>'id')%>
<%= text_field_tag(:user, 'text')%>
<%= text_area_tag(:message, "Hi, nice site", :size => "24x6") %>
<%= submit_tag(:go)%>
<% end %>
form_tag - приймає першим параметром урл на який буде відселати форму, якщо ви задаєте його рядком символів то все нормальн, а якщо хешем то потрібно відділити як окремий параметер. Далі предаються інші параметри в вигляді продовження хеша, воним можуть бути і опущені. Все що знаходиться в середині "form_tag" є хелперами для формування тегів форми.
Назви елементів форми є логічними, а закінчення на "_tag" вказує що це простий елемент, першим параметром зазвичай іде ім'я поля, потім значення, і далі можна вказувати додаткові параметри, значення також можна конкретно задати винісши в ":value=> 'значення'";
Також є більш спеціальні хелпери(модельні) для формування полів, вони більш привязані до моделі і приймають два значення для імені поля формуючи назву як масив, до прикладу
<%= email_field(:user, :address) %>
сформує поеле з назвою "user[address]", після чого даний масив можна вже зберігати. В таких хелперах опущене закінчення "_tag", але вони можуть використовуватись і для "form_tag".
Наступний є метод формування форми є використання form_for, превага над попереднім в тому що ми привязуємось до конкретної моделі і не потрібно викоритсовувати надлишкове формування масивів для привязки оскільки вони будуть генеруватись автоматично і нам потребіно тільки вказувати назву поля що відповідає полю моделі тому хелпери такого методу ще називаються модельними.
Для використання такого методу потрібно ініціювати змінну моделі: @user = User.new
<%= form_for @user, :url => { :action => "index" }, :html => {:class => "nifty_form"} do |f| %>
<%= f.text_field :firstname %>
<%= f.text_field :surname %>
<%= f.submit "Create" %>
<% end %>
в даному випадку все я думаю зрозуміло, хочеться тільки наголосити що якщо в нас немає в моделі такого поля як "firstname" то буде згенерована помилка оскільки такого виду форма є чітко привязаною. Також для заповнення фоми залежної моделі ми можемо використати fields_for, для чого ми тільки вказуємо привязку з залежною моделлю:
<%= form_for @user, :url => { :action => "index" }, :html => {:class => "nifty_form"} do |f| %>
<%= f.text_field :firstname %>
<%= f.text_field :surname %>
<%= fields_for @user.detail do |contact_form| %>
<%= contact_form.text_field :phone_number %>
<% end %>
<%= f.submit "Create" %>
<% end %>
Якщо ви нормально налаштували роутинг, то мжете не вказувати чітко значення урл.
No comments:
Post a Comment