2012-05-06 41 views
8

Xin lỗi nếu điều này đã được hỏi và trả lời đầy đủ ở đâu đó. Không chắc chắn nếu tôi đang tìm kiếm với Rails chính xác nói cho câu hỏi này.Cách tạo một biểu mẫu Rails với các trường biểu mẫu động từ một bảng cơ sở dữ liệu?

Tôi muốn tạo biểu mẫu Đường ray dựa trên các trường được lưu trữ trong cơ sở dữ liệu. Dưới đây là những gì các mô hình của tôi trông giống như vậy cho đến nay.

class Field < ActiveRecord::Base 
    belongs_to :form 
end 

class Form < ActiveRecord::Base 
    has_many :fields 
end 

Mô hình trường rất đơn giản như bây giờ với loại: chuỗi và cột bắt buộc: boolean. Tên là tên của điều khiển mà tôi muốn tạo (hộp văn bản, hộp kiểm, radiobutton). Lý tưởng nhất là tôi muốn làm một cái gì đó như thế này:

<%= form_for [something here] do |f| %> 
    <% @fields.each do |field| %> 
    <%= field.type %><br /> 
    <% end %> 
<% end %> 

Tôi đang phải vật lộn với việc tìm kiếm một cách để thay thế dòng <% = field.type%> với một thẻ mà sẽ làm cho đúng field.type.

Điều này có khả thi không? Tôi có nên sử dụng một cột tải trọng tốt hơn trong mô hình trường lưu trữ các kiểu trường và các giá trị như json/xml không?

+1

là loại: string lưu trữ nó như Rails phương pháp helper (như, radio_button)? Trong trường hợp đó, bạn có thể làm 'f.send (field.type, field.name)'. Nếu không, chỉ cần ánh xạ các giá trị kiểu của bạn tới Rails helpers, và sau đó bạn gửi đúng phương thức. – TuteC

+0

Hiện tại tôi không lưu với các phương thức trợ giúp. Tôi mới làm quen với khái niệm nhưng nó nghe chính xác những gì tôi muốn làm! F.send() có trong một thẻ không? Ví dụ: <% = f.send (field.type, field.name)%>. Cảm ơn. –

+0

Những gì @TuteC đề cập nên hoạt động – bruno077

Trả lời

6

Giống như @TuteC đề cập, bạn có thể sử dụng phương pháp .send để tự động gọi từng lĩnh vực, nếu bạn đang tiết kiệm loại:

<%= form_for [something here] do |f| %> 
    <% @fields.each do |field| %> 
    <%= f.send(field.type.to_sym, field.name) %><br /> 
    <% end %> 
<% end %> 
+0

Điều này làm việc nhờ sự giúp đỡ của bruno và @TuteC. –

+0

bạn là người đàn ông :) cảm ơn bạn thân –

Các vấn đề liên quan