Простая одна модель особой задачи маршрутизации ресурсов - PullRequest
0 голосов
/ 11 сентября 2010

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

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

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

Спасибо

1 Ответ

1 голос
/ 11 сентября 2010

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

Так что вы должны использовать это:

<%= link_to 'Edit', edit_cart_path %>

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

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

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

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

Я тоже не знаю почему, но все должно быть в порядке ......

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...