2011-07-28 32 views
5

Tôi không thể tìm ra hoặc tìm bất kỳ giải pháp nào cho một câu hỏi rất đơn giản: "Làm cách nào để xác định trường nhập của riêng tôi trong formtastic?"Thêm trường nhập tùy chỉnh trong formtastic?

Đây là những gì tôi nhận:

<%= semantic_form_for @someFantasticVariable, :url => "/someFantasticUrl.html" do |f|%> 
    <%= f.inputs do %> 
     <%= f.input :something_else_id, :required => true , :as => :select, :collection => SomethingElse.find(:all), :label =>"The something else"%> 
     <%= f.input :fantastic_max_cost, :label => "Budget (max cost)"%> 
    <%end%> 


    <%= f.buttons do%> 
     <%= f.commit_button :button_html => { :class => "primary", :disable_with =>  'Processing...', :id => "commitButton"}%> 
    <%end%> 
<%end%> 

Bây giờ ..

Tôi muốn có một điều rất đơn giản. Tôi muốn quảng cáo một trường không phải là một phần của mô hình. Tôi muốn có một lĩnh vực ngày mà tôi có thể sử dụng để tính toán một số thứ trong bộ điều khiển của mình. Vì vậy, tôi muốn làm điều này:

<%= f.inputs do %> 
    <%= f.input :something_else_id, :required => true , :as => :select, :collection => SomethingElse.find(:all), :label =>"The something else"%> 
    <%= f.input :fantastic_max_cost, :label => "Budget (max cost)"%> 
    <%= f.input :start_date, :as => :date , :label => "Start date"%> 
<%end%> 

Nhưng rõ ràng là tôi không được phép và tôi không thể tìm thấy cách nào để thực hiện điều này thông qua việc googling. Bất kỳ trợ giúp/ý tưởng?

Trả lời

6

Nếu bạn có một số thuộc tính đó không phải là một phần của mô hình của bạn, sau đó một getter và setter nên tồn tại trên mô hình:

def start_date 
end 

def start_date=(arg) 
end 

Sau đó, bạn có thể tính toán nhân viên của bạn trên một bộ điều khiển hoặc bất cứ điều gì bạn muốn:

... 
puts params[:somefantasticvariable][:start_date] 
... 

Nhưng đây là một formtastic hack nhanh chóng, bạn nên tìm một cách nào đó tốt hơn, như đầu vào phi formtastic với một số css, vv

+0

Những gì tôi thực sự muốn chỉ là một tham số phụ khi tôi gửi biểu mẫu. Nhưng tôi sẽ thấy nếu điều này sẽ làm các trick. – Automatico

+0

Nó làm việc :) Nhưng nó cảm thấy như một hack mặc dù. Sẽ được tốt đẹp nếu formtastic có một cách dễ dàng để thêm các lĩnh vực mà không phải là một phần của mô hình. Như tôi đa noi. Tôi chỉ cần tham số khi tôi gửi biểu mẫu, vì vậy nó không thực sự thuộc về mô hình. Nhưng điều này làm việc cho bây giờ. Cảm ơn :) – Automatico

+1

"Nếu bạn có một số thuộc tính không phải là một phần của mô hình của bạn, sau đó một getter và một setter nên tồn tại trên mô hình" Huh? –

1

của Ruby cung cấp một cơ sở dữ liệu-less xây dựng ca lled an attr_accessor. Nó tương đương với việc viết các phương thức setter và getter. Formtastic sẽ thấy thuộc tính này tương tự như thuộc tính được hỗ trợ bởi cơ sở dữ liệu.

Trong mô hình @someFantasticVariable của bạn:

attr_accessor :start_date 

Nếu sử dụng attr_accessible trong mô hình @someFantasticVariable của bạn, hãy chắc chắn để thêm biến start_date có quá:

attr_accessible :start_date 

Bởi vì thuộc tính là gõ-less, Formtastic không thể lấy được trường nhập HTML để sử dụng. Bạn sẽ cần phải đặt loại đầu vào theo cách thủ công bằng cách sử dụng :as. Ví dụ của bạn:

<%= f.input :start_date, :as => :date_select %> 

Cite:

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