2009-12-15 18 views
18

Ben sadece bir alanı var (diyelim bir arama alanı) ya da bu An Email Form with Ruby on RailsRaylarda yakutta model olmayan bir form nasıl yapılır?

benzer bir form yazma eski bir yolunu kullanmak, örneklerin çoğunda bulabilirim raylarda yakut olmayan bir modeli formu yapmaya çalışıyorum

Herhangi biri bana örnek olmayan bir formun örnek kodunu, görünüm için iki alan ve denetleyicide bu alanlara nasıl eriştiğimi gösterebilirse, minnettar olurum.

Çok teşekkürler.

+0

kullanabilirsiniz 4 Bir iletişim formu için "form for" stili kullanmak daha kolay olurdu? – conspirisi

+0

Veritabanı olmayan nesnelerin kolay doğrulanması için geçerli gemiye göz atın. http://github.com/jnunemaker/validatable –

+0

başarısız doğrulama giriş değerlerini geri yüklemek için: http://stackoverflow.com/questions/4129229/rails-restoring-contents-of-non-model-form-that-uses- form-tag/24974457 # 24974457 –

cevap

32

Sen FormHelper yöntemleri gerekir:

Test eylem (Mesajlar/test.html.erb) için basit bir görünüm:

Eğer do_test eylem gönderdiğinde basit test eylemi istediğini söyle mesaj kontrol olarak
<% form_tag '/posts/do_test' do %> 
    <%=label_tag 'name' %> 
    <%=text_field_tag 'name'%> 

    <%=label_tag 'phone' %> 
    <%=text_field_tag 'phone'%> 

    <div><%= submit_tag 'Save' %></div> 
<% end -%> 

:

def test 
end 

def do_test 
    name = params[:name] 
    phone = params[:phone] 
    # do whatever you want... 
end 

Ayrıca size nesneyi temsil eden bir sınıf oluşturmak durumunda

map.resources :posts, :collection=>{:test => :get, :do_test => :post} 
+0

Ben de Rails5 için çalışmak ... Bazen yakında, bunu kontrol edeceğiz ... – conspirisi

5

/routes.rb config rotalara bu 2 eylemler eklemek gerekir, sonra bu sınıfın üzerinde yöntemlerini tanımlayabilir (en ContactInfo diyelim) Standart Rails form oluşturucu yardımcılarını kullanarak bunları kullanın.

class ContactInfo 
    attr_accessor :name, :company, :email, :phone, :comments 

    def initialize(hsh = {}) 
    hsh.each do |key, value| 
     self.send(:"#{key}=", value) 
    end 
    end 
end 

Ve formda

:
<h2>Contact Us</h2> 
<% form_for(@contact_info, :url => path_for_your_controller_that_handles_this, :html => {:method => :post}) do |f| %> 

    <%= f.label :name %> 
    <%= f.text_field :name %> 

    ... 
<% end %> 

Şimdiye kadar, kimin doğru umurunda?

Ancak, validatable gem'u ekleyin ve bunu yapmak için gerçek bir neden var! Artık gerçek bir model gibi doğrulama mesajlarına sahip olabilirsiniz.

Kontrol dışarı benim tamamlanan ContactInfo sınıf: Eğer ihtiyaç duyduğunuzda mantığın bir sürü o kadar muss zorunda bir ActiveRecord nesnesi olarak Denetleyiciniz kadar aynı şekilde yazıp olamaz çünkü bu gibi

class ContactInfo 
    include Validatable 

    attr_accessor :name, :company, :email, :phone, :comments 

    validates_presence_of :name 
    validates_presence_of :email 
    validates_presence_of :phone 

    def initialize(hsh = {}) 
    hsh.each do |key, value| 
     self.send(:"#{key}=", value) 
    end 
    end 
end 

formu yeniden görüntülemek için

Ayrıca, Formtastic veya başka bir özel form oluşturucu kullanıyorsanız, bu nesneyi mevcut form stillerinizi kolayca tutarak kullanabilirsiniz.Raylar itibaren

+0

sayesinde bu denemek için – conspirisi

İlgili konular