【问题标题】:how to save data from session to the database?如何将会话中的数据保存到数据库?
【发布时间】:2011-05-18 01:04:50
【问题描述】:

我正在使用 rails 3 应用程序。 我有个问题。如何将会话中的数据保存到数据库中?我想将签入和签出会话保存到日期时间数据类型的数据库中。

控制器:

def step2
    @cart = current_cart

    checkin = params[:checkin]
    checkout = params[:checkout]
    @amenities = Amenity.available(checkin, checkout)

    session[:checkin] = checkin
    session[:checkout] = checkout
end

查看:

<%= f.hidden_field :Transaction_Date, :value => Time.now %>
    <%= f.hidden_field :rsv_type, :value => "Online" %>
    <%= f.hidden_field :rsv_status, :value => "Pending" %>
    <%= f.hidden_field :checkin, session[:checkin] %>
    <%= f.hidden_field :checkout, session[:checkout] %>
<% end %>

我收到此错误:

NoMethodError
undefined method `merge' for "05/18/2011":String

帮助..请。谢谢。

来自我的应用程序控制器:

private

def current_cart
    Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
    cart = Cart.create
    session[:cart_id] = cart.id
    cart
end

当我输入这些代码时:

@cart.checkin = DateTime.strptime(session[:checkin], "%m/d/%Y %I:%M:%S %p").to_time
@cart.checkout= DateTime.strptime(session[:checkout], "%m/d/%Y %I:%M:%S %p").to_time
@cart.save

我收到 ArgumentError 无效日期的错误。 :( 我该怎么办?我的数据库使用的是 sql server 2005。

这是我的购物车模型

类购物车 :destroy

def add_amenity(amenity_id)
    current_item = line_items.where(:amenity_id => amenity_id).first
    if current_item
        return false
    else            
        current_item = LineItem.new(:amenity_id => amenity_id)
        line_items << current_item
    end
    current_item
end

def total_price
    line_items.to_a.sum { |item| item.amenity.fee }
end

def payable
    total_price * 0.50
end
end

【问题讨论】:

    标签: sql ruby-on-rails sql-server-2005 ruby-on-rails-3


    【解决方案1】:

    您不需要在表单中传递会话数据(示例中的最后两个 hidden_​​fields)。一般来说,保存会话数据非常简单。

    # some controller action with @cart defined
    @cart.checkin = session[:checkin]
    @cart.checkout = session[:checkout]
    @cart.save
    

    确保对此会话数据进行任何必要的验证,以保护您的系统并确保保存到数据库中的数据是高质量的。

    此外,对于关键信息,不应信任会话数据,绝对不要使用它来存储密码、与您的购物车相关的财务数据等。


    关于您问题的日期部分,这是如何将字符串日期转换为实际日期/时间。

    DateTime.strptime("2011/05/18 13:42:02", "%Y/%m/%d %H:%M:%S").to_time
    

    【讨论】:

    • 我遇到了另一个错误。 #<0x3bdbbc8>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多