我想创建一个用户注册表单,其中用户勾选了一些没有连接到模型的框。
例如,可能有一个'terms & Conditions‘框,我不希望在用户模型中有一个布尔型字段,上面写着'ticked Terms & conditions’。相反,我想在其他地方(如事务)创建一条记录,记录他们接受T&C的日期/时间。
另一个例子可能是他们指出的一些偏好,我将在以后使用,并暂时保留在会话中,比如“记住我”。
我可以将这些类型的字段与常规表单帮助器混合使用。在使用formtastic时,我该如何做上面的任何一个示例?它不得不将传统的rails标签与可爱、整洁、形式化的代码混合在一起。
发布于 2009-10-22 01:33:28
您可以在模型中创建任意数量的虚拟属性,这些属性不一定需要绑定到数据库列。将attr_accessor :terms_and_conditions添加到用户模型中将使此“字段”对formtastic可用--即使它不是数据库字段。您可以像验证任何其他字段一样验证它,或者创建您自己的setter方法,以便在需要的地方创建一条记录。
发布于 2010-01-11 01:53:15
我倾向于不同意将attr_accessors用于特定于操作的entry元素的方法。如果需要记录Ts&C,那么这是有意义的,但有时你需要真正与模型无关的数据,而只与手头的特定操作相关,例如“在执行操作时执行一些重量级操作”。
假设您有一个注册表单,并且您没有使用OAuth,并且您可以选择在注册时指定twitter用户名和密码。这很好:
<%= form.input :twitter_username %>
<%= form.input :twitter_password, :as => :password %>但下面的这一点让我感到困惑--在这种情况下,它就像formtastic一样,实际上是取走了已经存在的东西。有没有一种方法可以添加params:your-object,同时仍然保持形式化来做所有可爱的布局?
这样如何:
class User < ActiveRecord::Base
...
#I don't want this here. Its only for UserController#create.
#attr_accessor :tweet_when_signed_up
...
end和:
<%= form.input :tweet_when_signed_up, :as => :checkbox, :param_only => true %>param_only是我编造的建议。它说‘这甚至不是一个暂时的属性,它只是为了这个动作。’
class UserController < ActionController::Base
...
def create
if params[:tweet_when_signed_up] # haven't done this yet -- == 1 or !.nil?
Tweeter.tweet( ... )
end
@user = User.create( params[:user] )
end做到这一点的能力可能就在那里--有谁知道如何有效地做上面我认为是一个好主意的事情?
谢谢!
发布于 2009-10-22 12:29:51
相反,我想在其他地方(如事务)创建一条记录,记录他们接受T&C的日期/时间。
使用bensie描述的attr_accessor将该字段与formtastic集成在一起。
Formtastic是关于视图逻辑的,而关系是更多的模型逻辑。不要担心在表单中创建相关记录。取而代之的是,在模型中使用before_update和after_save等回调函数,以确保创建了相关记录。
https://stackoverflow.com/questions/1601979
复制相似问题