2016-03-26 15 views
2

Bir kartta bir ürüne miktar ekleyebileceğim bir sayfa uygulamaya çalışıyorum. Bu konuda iyi dersler var mı?Raylar GUT ile eşleşmiyor, ancak eğim rotası var olduğunu gösteriyor

No route matches {:action=>"show", :controller=>"carts", :id=>nil} missing required keys: [:id] 

... aklınızda bulundurun:

<%= form_for(@cart[0]) do |f| %> 
    <% if @cart.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@cart.errors.count, "error") %> prohibited this cart from being saved:</h2> 

     <ul> 
     <% @cart.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Ve hatası ...

yüzden form_for tipik edit formunu uygulayan çalıştı ama bu beni böyle hatalar vererek tuttu Bu edit eyleminde, bu yüzden neden show eylem hakkında şikayet ediyor bilmiyorum. Neyse ben id: false yapılmış ve parametreler

<td><%= link_to 'Edit', edit_cart_path(cart, :id => cart.cart_id, :product_id => cart.product_id) %></td> 

Bu benim denetleyicisi eylem

def edit 
    @cart = Cart.where(:cart_id => params[:id], :product_id => params[:product_id]) 
    end 

içinde ne var index.html dosyasında cart_id

benim birincil anahtar ı özelleştirmek özelleştirilmiş Ve doğruladı var Doğru kaydı bulur.

Bu yüzden, tüm bunları vidaladım ve form_tag yapmamaya karar verdim ve miktarı update eylemine parametre olarak göndermeye karar verdim. edit.html

<%= form_tag('/carts', method: 'put') do %> 
    <%= number_field_tag "Quantity" %> 
<% end %> 

aşağıdaki Ama sonra şikayet gibi olduğunda hiçbir koymak rota Ben :id yok çünkü bu hatayı hayal ediyorum

cart GET /carts/:id(.:format)   carts#show 
     PATCH /carts/:id(.:format)   carts#update 
     PUT /carts/:id(.:format)   carts#update 

var ... vardır o halde ben şu

resources :carts, :except => 'put' do 
    # put :carts 
    put "/carts" => "carts#update" 
    end 

gibi koymak eylemi geçersiz karar Ama aynı no put route found hata alıyorum.

Herhangi bir fikrin var mı? Bu yolların

+0

Başlangıç ​​hanesine odaklanmanızı sağlar Kodun hangi satırında bu hatayı aldınız? Hiçbir rota eşleşmiyor {: action => "show",: controller => "carts",: id => nil} eksik anahtarlar : [: id] '? – Pavan

cevap

1

ikisi:

PATCH /carts/:id(.:format)   carts#update 
PUT /carts/:id(.:format)   carts#update 

bir kimliği gerektirir. Kimlik, güncellemek istediğiniz sepetin kimliği olacaktır. cart_path(@cart.id) gibi bir şey söz konusu dizeyi kullanmak istiyorsanız, bunu id "/carts/#{@cart.id}"

+1

Lütfen dizgileri birleştirme veya dizgi enterpolasyonu ile yol veya url oluşturmayın. Rotaları değiştirdiğinizde veya uygulamanızı yeniden düzenlerken bulmanız zor olan hatalara yol açar. Url yardımcısını kullanmak daha iyidir, çünkü en azından URL'nin gerçekten var olmasını sağlar. – spickermann

0

Sen arabaları için yolları dosyadan mevcut girişi görünmüyor geçmeniz gerekir veya çalışacak. Kullanıcı birden fazla alışveriş sepeti vardı ... ama genellikle durumda değilse bulmak olacaktır

resources :carts

,: Ben zaten yolları dosyasında böyle bir şey olabileceğini tahmin ediyorum o? Sende bir tane var. Bu bir singleton.Ben hepsini kapsamaz, sen gösteren şeye yanlış bakmak birkaç şey daha var

resource :cart

, ama burada birkaç ipucu var: Böylece, rotanız olacağını

Form ve rota oluşturma işlemini kolaylaştırmak için simple_form gibi bir şey kullanmanızı öneririz.

Sepeti, denetleyicinizde kimliğe göre getiriyorsunuz - kullanıcıların birbirlerinin arabalarını değiştirmesini istiyor musunuz? Muhtemelen hayır - muhtemelen

@cart = current_user.cart çizgisinde bir şey istiyorum ... ve, aslında, sepeti kimliğine göre bunu çekicisin ve ... tarafından product_id? Gerçekten mi? Bir arabada sadece bir ürün var mı? Sepeti has_and_belongs_to_many :products ve has_and_belongs_to_many :carts ürününe kadar beklerim - çünkü birçok kullanıcı sepetinde aynı ürüne sahip olabilir ve bir kartta birçok ürün bulunabilir.

Bu bir başlangıç ​​- iyi şanslar!

İlgili konular