代码之家  ›  专栏  ›  技术社区  ›  hurikhan77

我可以将struct.new用作Rails模型吗?或者:如何创建匿名结构化的、不支持数据库的会话?

  •  1
  • hurikhan77  · 技术社区  · 15 年前

    举个例子:

    class AnonymousSession << Struct.new(:location, :preferences)
      def valid?
        ...
      end
      def new_record?
        ...
      end
    end
    

    虽然此接口足以创建资源丰富的表单等,但只要我想将表单数据保存到会话中,它就会失败:

    if session[:user] = AnonymousSession.create(params[:anonymous_session])
      #--> fails with "unknown key(s): location..."
      ...
    end
    

    错误消息是关于“未知密钥”。有什么线索可以让它工作吗?我只需要没有数据库后端的匿名会话。它们是完全一次性的,因为它们的寿命很短。

    也许我的方法是错误的,而且已经有了一个优雅的匿名会话解决方案?我看过AuthLogic,但我发现的任何示例都附带有一个ActiveRecord模型(因此绑定到数据库)。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Community CDub    8 年前

    我已经用过 this 解决方案,我的模型是从无表派生的。我想在你的情况下也可以。

        2
  •  1
  •   Andrew Atkinson    15 年前

    Ryan Bates有几集可能会帮到你: Session Based Model Super Simple Authentication .

        3
  •  0
  •   Nicholas C    15 年前

    你得多解释一下你想完成什么。为什么你不能在/app/models中创建一个匿名会话类?

    class AnonymousSession
    
      attr_accessor :location, :preferences
    
      def new_record?
       # ...
      end
    
      def valid?
       # ...
      end
    
    end