Nếu bạn tạo một lớp học để đại diện cho đối tượng của bạn (Hãy gọi nó là ContactInfo
), bạn có thể xác định phương pháp trên lớp, sau đó sử dụng chúng bằng cách sử dụng trình trợ giúp trình tạo biểu mẫu Rails chuẩ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
Và trong hình của bạn:
<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 %>
Cho đến nay, những người quan tâm phải không?
Tuy nhiên, hãy thêm vào số validatable gem và bạn có lý do thực sự để thực hiện việc này! Bây giờ bạn có thể có các thông báo xác thực giống như một mô hình thực.
Check-out hoàn thành lớp ContactInfo tôi:
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
Tôi thích video này bởi vì bạn có thể viết điều khiển nhiều theo cùng một cách bạn như là một đối tượng ActiveRecord và không phải Muss nó lên với rất nhiều của logic cho khi bạn cần để hiển thị lại biểu mẫu.
Ngoài ra, nếu bạn đang sử dụng Formtastic hoặc trình tạo biểu mẫu tùy chỉnh khác, bạn có thể sử dụng đối tượng này với nó, dễ dàng giữ kiểu dáng hiện có của bạn.
Tôi cũng nhận thấy một vài ý kiến khắp nơi trên web ngụ ý rằng các hình thức phi mô hình là một nỗi đau để xác nhận, sinh mệnh trường hợp nó sẽ dễ dàng hơn để sử dụng một "hình thức cho" phong cách cho một hình thức liên lạc? – conspirisi
Kiểm tra đá quý hợp lệ để dễ dàng xác thực các đối tượng không phải là cơ sở dữ liệu. http://github.com/jnunemaker/validatable –
Để khôi phục các giá trị đầu vào khi xác thực không thành công: http://stackoverflow.com/questions/4129229/rails-restoring-contents-of-non-model-form-that-uses- form-tag/24974457 # 24974457 –