【问题标题】:Formtastic and FormtaghelperFormtastic 和 Formtaghelper
【发布时间】:2009-10-21 16:26:55
【问题描述】:

我想创建一个用户注册表单,用户在其中勾选一些未连接到模型的框。

例如,可能有一个“条款和条件”框,我不希望用户模型中有一个布尔字段说“已勾选条款和条件”。相反,我想在其他地方(如交易)创建一个记录,记录他们接受 T&C 的日期/时间。

另一个例子可能是他们指出我稍后会使用并暂时保留在会话中的某些偏好,例如“记住我”。

我可以将这些类型的字段与常规表单助手混合使用。使用formtastic时,我怎么能做上面的任何一个例子?必须将传统的 Rails 标签与可爱的干净格式代码混合在一起,这有点坚持。

【问题讨论】:

    标签: ruby-on-rails forms webforms


    【解决方案1】:

    您可以在模型中创建任意数量的虚拟属性,这些虚拟属性不一定需要绑定到数据库列。将 attr_accessor :terms_and_conditions 添加到您的用户模型将使这个“字段”可用于 formtastic——即使它不是数据库字段。如果需要,您可以像任何其他字段一样验证它,或者创建自己的 setter 方法在其他地方创建记录。

    【讨论】:

      【解决方案2】:

      我倾向于不同意将 attr_accessors 用于特定于操作的入口元素的方法。如果需要记录 Ts&C,那么这是有道理的,但有时您需要的数据确实与模型无关,并且仅与手头的特定操作相关,例如“在执行操作时执行一些重量级操作”。

      假设您有一个注册表单,并且您没有使用 OAuth,并且您可以选择在注册时指定 twitter 用户名和密码。这很好:

      <%= form.input :twitter_username %>
      <%= form.input :twitter_password, :as => :password %>
      

      但是下面的这一点让我感到困惑——在这种情况下,它就像形式化实际上是在带走已经存在的东西。有没有办法在添加 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
      

      这样做的能力可能就在那里——有人知道如何有效地做我认为上面的好主意吗?

      谢谢!

      【讨论】:

        【解决方案3】:

        相反,我想创建一条记录 其他地方(如交易) 记录他们的日期/时间 接受条款和条件。

        使用 bensie 描述的 attr_accessor 将字段与 formtastic 集成。

        Formtastic 是关于视图逻辑的,而关系更多的是模型逻辑。不用担心在表单中创建相关记录。相反,在模型中使用 before_update 和 after_save 之类的回调来确保已创建相关记录。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多