6

有时我们需要没有模型创建的表单 - 例如搜索字段或电子邮件,应该在哪里发送一些说明。创建此表单的最佳方法是什么?我可以创建虚拟模型或类似的东西吗?我想使用formtastic,但不是form_tag。

4

3 回答 3

18

首先,Formtastic 并非在所有情况下都需要模型,尽管它确实工作得最好并且需要更少的模型代码。

就像 Rails 自己的 built-in 一样form_for,您可以传入符号而不是对象作为第一个参数,Formtastic 将构建表单并根据符号发布参数。例如:

<% 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 所期望的方法,直到你让它工作!

于 2009-12-01T10:45:08.340 回答
1

default_language.rb

类 DefaultLanguage
  attr_accessor :language_id
结尾

foo_controller.rb

  定义索引
    @default_language = 参数[:default_language] || Language.find_by_name("英文")
  结尾

索引.erb

<% semantic_form_for @default_language 做 |form| %>
  <% form.inputs :id => 'default_language' 做 %>
      <%= form.input :id,
       :as => :选择,
       :collection => @languages,
       :必需 => 假,
       :label => "主要语言:",
       :include_blank => 假 %>
    <% 结束 %>
  <% 结束 %>

当值更改时,我使用 AJAX 发布表单。

于 2010-01-30T03:14:53.233 回答
-1

或者您只需使用 form_for 创建一个表单并将模型参考留空。例如 <% form_for "", :url=>some_url do |f| %> <%= f.text_field "some_attribute" %> <%= submit_tag "submit" %>

您可以通过在控制器中简单地说 params[:some_attribute] 来获取值。

于 2009-11-25T18:48:11.677 回答