如何将数据从会话保存到数据库?

时间:2011-05-18 01:04:51

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

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

控制器:

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
请帮助..感谢。

来自我的applicationcontroller:

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作为我的数据库。

这是我的购物车型号

类购物车&lt;的ActiveRecord :: Base的     has_many:line_items,:dependent =&gt; :破坏

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

1 个答案:

答案 0 :(得分:2)

您不需要在表单中传递会话数据(示例中的最后两个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
相关问题