我正在尝试实施一个页面,我可以在购物车中为产品添加数量。关于这个的任何好的教程?
所以我尝试使用edit
来实现典型的form_for
表单,但这样一直给我这样的错误......
<%= 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 %>
错误:
No route matches {:action=>"show", :controller=>"carts", :id=>nil} missing required keys: [:id]
...请记住,这是edit
行动,所以我不知道为什么抱怨show
行动。无论如何我已经id: false
并将我的主键自定义为cart_id
在index.html
文件中我自定义参数
<td><%= link_to 'Edit', edit_cart_path(cart, :id => cart.cart_id, :product_id => cart.product_id) %></td>
这就是我在控制器动作中所拥有的
def edit
@cart = Cart.where(:cart_id => params[:id], :product_id => params[:product_id])
end
我已经确认它找到了正确的记录。
所以,我说了所有这一切并决定只做一个form_tag
,然后将数量作为参数发送到update
动作。与edit.html
<%= form_tag('/carts', method: 'put') do %>
<%= number_field_tag "Quantity" %>
<% end %>
然后它抱怨没有放置路线,当有...时
cart GET /carts/:id(.:format) carts#show
PATCH /carts/:id(.:format) carts#update
PUT /carts/:id(.:format) carts#update
我会想象这个错误是因为我没有:id
因此我决定覆盖put动作,如下所示
resources :carts, :except => 'put' do
# put :carts
put "/carts" => "carts#update"
end
但我得到了同样的no put route found
错误。
有什么想法吗?
答案 0 :(得分:1)
这两条路线都是:
public ActionResult register(FormCollection collection, HttpPostedFileBase FileUpload1){
RegistrationIMG regimg = new RegistrationIMG();
string ext = Path.GetExtension(FileUpload1.FileName);
string path = Server.MapPath("~/image/");
FileUpload1.SaveAs(path + reg.email + ext);
regimg.Image = @Url.Content("~/image/" + reg.email + ext);
db.SaveChanges();}
需要一个id。 id将是您要更新的购物车的ID。像PATCH /carts/:id(.:format) carts#update
PUT /carts/:id(.:format) carts#update
这样的内容可以使用或,如果您想使用该字符串,则需要将其传递给cart_path(@cart.id)
答案 1 :(得分:0)
您不会显示路线文件中现有的购物车条目。我猜你的路线文件中可能有这样的东西:
resources :carts
如果用户有多个购物车,可以找到...但是通常情况并非如此,是吗?你有一个。它是一个单身人士。因此,您的路线将是:
resource :cart
在你所展示的内容中还有一些看起来不对的东西,我无法涵盖所有内容,但这里有几个提示:
我建议使用simple_form之类的东西来简化表单和路由生成。
您在控制器中通过ID获取购物车 - 您是否希望用户能够修改彼此的购物车?可能不是 - 你可能想要@cart = current_user.cart
...实际上,您是通过购物车ID和 product_id 获取的?真?购物车中只有一种产品吗?我希望购物车has_and_belongs_to_many :products
和产品到has_and_belongs_to_many :carts
- 因为许多用户可能在购物车中拥有相同的商品,购物车中可能包含许多商品。
这是一个开始 - 祝你好运!