У меня есть урезанное приложение для корзины покупок, в настоящее время с одной моделью корзины, идентификатор корзины хранится в сеансе.
контроллер корзины использует этот метод, поэтому у нас всегда есть корзина
def initialize_cart
if session[:cart_id]
@cart = Cart.find(session[:cart_id])
else
@cart = Cart.create
session[:cart_id] = @cart.id
end
end
файл моего маршрута содержит одну строку
map.resource :cart
мой просмотр корзины / шоу выглядит следующим образом, я добавил к нему форму, чтобы в конечном итоге я мог обновить количество элементов, носейчас я просто редактирую атрибут create_at.
<% form_for(@cart) do |f| %>
<%= f.date_select :created_at %>
<p>
<%= f.submit 'Update' %>
</p>
<% end %>
<%= link_to 'Edit', edit_cart_path(@cart) %> |
<%= link_to 'Back', cart_path %>
и, наконец, мое действие по обновлению выглядит следующим образом:
def update
#@cart = Cart.find(params[:id])
respond_to do |format|
if @cart.update_attributes(params[:cart])
format.html { redirect_to(cart_path) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @cart.errors, :status => :unprocessable_entity }
end
end
end
, когда я изменяю атрибут «creation_at» в«показать» страницу, атрибут успешно обновлен, но когда меня перенаправляют, я получаю причудливый URL-адрес, подобный этому
http://192.168.0.10:3000/cart.%23%3Ccart:0x23d46fc%3E
Я возился с действием обновления и могу заставить все это работать отличноделая это
# PUT /carts/1
# PUT /carts/1.xml
def update
#@cart = Cart.find(params[:id])
#respond_to do |format|
if @cart.update_attributes(params[:cart])
redirect_to(cart_path)
# head :ok
#else
# render :action => "edit"
# render :xml => @cart.errors, :status => :unprocessable_entity }
end
#end
Это как-то связано с блоком response_to, из-за которого он портится, я был бы очень признателен за любую помощь, которую я могу получить с этим.
Спасибо