[英]virtual model and form_for (or formtastic)
有時我們需要沒有模型創建的表單 - 例如搜索字段或電子郵件,應該在哪里發送一些指令。 創建此表單的最佳方法是什么? 我可以創建虛擬模型或類似的東西嗎? 我想使用formtastic,但不是form_tag。
首先,Formtastic在所有情況下都不需要模型,盡管它確實效果最好,並且需要較少的代碼與模型。
就像Rails自己的內置form_for
,你可以傳入一個符號而不是一個對象作為第一個參數,而Formtastic將構建表單並根據符號發布params。 例如:
<% semantic_form_for(:session) do |f| %>
...
<% end %>
這將使控制器可以使用params[:session]
作為表單值。
其次, 模型並不意味着ActiveRecord模型。 我的意思是,Formtastic將與叫聲也像ActiveRecord模型類的任何實例工作。
許多人使用Authlogic進行Formtastic身份驗證的典型例子。 Authlogic的一部分是UserSession模型的想法,它工作正常:
控制器:
def index
@user_session = UserSession.new
end
形成:
<% semantic_form_for(@user_session) do |f| %>
<%= f.input :login %>
<%= f.input :password %>
<% end %>
這將使您的控制器中的表單數據可用作params[:user_session]
。
這真的不是很難創建一個模型實例來包裹你的模型的關注。 只需繼續實施Formtastic期待的方法,直到你開始工作!
default_language.rb
class DefaultLanguage attr_accessor :language_id end
foo_controller.rb
def index @default_language = params[:default_language] || Language.find_by_name("English") end
index.erb
<% semantic_form_for @default_language do |form| %> <% form.inputs :id => 'default_language' do %> <%= form.input :id, :as => :select, :collection => @languages, :required => false, :label => "Primary Language:", :include_blank => false %> <% end %> <% end %>
當值改變時,我使用AJAX發布表單。
或者您只需使用form_for創建一個表單,並將模型引用留空。 例如<% form_for "", :url=>some_url do |f| %>
<% form_for "", :url=>some_url do |f| %>
<%= f.text_field "some_attribute" %>
<%= submit_tag "submit" %>
您只需在控制器中輸入params [:some_attribute]即可獲取值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.