簡體   English   中英

虛擬模型和form_for(或formtastic)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM