как сохранить данные из сессии в базу данных? - PullRequest
0 голосов
/ 18 мая 2011

Я использую приложение rails 3. У меня проблема. Как я буду сохранять данные в моем сеансе в моей базе данных? Я хочу сохранить сеанс регистрации и проверки в базе данных с типом данных datetime.

Контроллер:

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 для моей базы данных.

вот модель моей корзины

класс Корзина : уничтожить

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 Ответ

2 голосов
/ 18 мая 2011

Вам не нужно передавать данные сеанса в вашей форме (последние два поля 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...