2010-09-11 2 views
0

У меня есть урезанное приложение корзины покупок, в настоящее время с одной моделью «cart», идентификатор корзины хранится в сеансе.Простая единственная проблема с маршрутизацией ресурсов

телега контроллер имеет этот метод, поэтому мы всегда имеем тележку

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 

моя корзина/показать вид выглядит следующим образом, я добавил формы, чтобы в конечном итоге я мог обновлять количество элементов, но на данный момент я просто редактирую атрибут created_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 

когда я внести изменения в «created_at» атрибут на странице «шоу», атрибут обновлен успешно, но когда я попадаю, я получаю bizare 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, который вызывает у него проблемы, я бы очень признателен за любую помощь, которую я могу получить с этим.

Благодаря

ответ

1

Для особого ресурса, вам не нужно указать объект на маршрутах.

Таким образом, вы должны использовать это:

<%= link_to 'Edit', edit_cart_path %> 

===== ===== ОБНОВЛЕНО

Я только что нашел вашу реальную проблему ^^»(но оригинал должен быть правдой тоже)

Вы использовали form_for(@cart) do |f|, который произвел, что уродливые путь

Пожалуйста, измените на form_for(@cart, :url => cart_path) do |f|

Не знаю, почему тоже, но должно быть хорошо ......

+0

Это не совсем то, что я пытаюсь сделать. – dangerousdave

+0

Пожалуйста, проверьте URL-адрес вашей формы в файле просмотра корзины/шоу, чтобы узнать, странно ли это ... – PeterWong

+0

Это работает! но почему не работает по умолчанию form_for (@cart) ??? я не понимаю. – dangerousdave

Смежные вопросы