gpt4 book ai didi

ruby-on-rails - Rails - 路由错误 'No route matches [PUT]'

转载 作者:数据小太阳 更新时间:2023-10-29 08:04:44 26 4
gpt4 key购买 nike

我正在尝试制作一个允许用户创建销售的小型应用程序。有用户模型产品模型和照片模型。一个用户有很多产品,产品有很多照片。但出于某种原因,在我尝试创建产品页面后出现此错误。

路由错误

No route matches [PUT] "/products"

routes.rb

  resources :products
resources :photos

产品控制者

  def new 
@product = Product.new
@photo = Photo.new
end

def create
@product = current_user.products.build(params[:product])
@photo = current_user.photos.new(params[:photo])

if @product.save && @photo.save
@photo.product_id = @product.id
render "show", :notice => "Sale created!"
else
render "new", :notice => "Somehting went wrong!"
end
end

def show
@product = Product.find(params[:id])
end

新产品页面 (HAML)

%h1 
create item

= form_for @product,:url => products_path, :html => { :multipart => true } do |f|
%p
= f.label :name
= f.text_field :name

%p
= f.label :description
= f.text_field :description
= f.text_field :ship_price

%p
= fields_for :photo, :html => {:multipart => true} do |fp|
= fp.file_field :image

%p.button
= f.submit

rake 路

       products GET    /products(.:format)               products#index
POST /products(.:format) products#create
new_product GET /products/new(.:format) products#new
edit_product GET /products/:id/edit(.:format) products#edit
product GET /products/:id(.:format) products#show
PUT /products/:id(.:format) products#update
DELETE /products/:id(.:format) products#destroy

如果我已经做了 resources:products ,这不应该工作吗?

最佳答案

这里有几个问题。首先,您的 @photo 对象未保存,这导致您的 View 为成功保存的 @product 呈现 new 操作(因此使用 put 方法制作表单,因为对象是 持久化的?)。这可能是因为您在保存之后而不是之前设置了照片的 product_id::

  if @product.save && @photo.save
@photo.product_id = @product.id

尝试在保存之前添加id,看看两个对象是否都有效。

如果其中一个对象保存失败,您将重定向到 new,这仍然存在一些逻辑问题。不要这样做,而是检查两个对象是否有效,如果有效则保存它们,否则重定向!然后,当重定向到 new 时,对象还没有被保存,表单将被创建为一个合适的 post 表单:

def create
@product = current_user.products.build(params[:product])
@photo = current_user.photos.new(params[:photo])
@photo.product_id = @product.id

if @product.valid? && @photo.valid?
@product.save
@photo.save
render "show", :notice => "Sale created!"
else
render "new", :notice => "Something went wrong!" # the product object hasn't been saved, this is now the correct form type
end
end

最后,将对象的错误消息添加到您的新页面,这样您就可以知道什么是无效的。

<% if @product.errors.any? %>
<%= pluralize(@product.errors.count, "error") %> prohibited this product from being saved:

<ul>
<% @product.errors.full_messages.each do |error_message| %>
<li><%= error_message %></li>
<% end %>
</ul>
<% end %>

关于ruby-on-rails - Rails - 路由错误 'No route matches [PUT]',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16914261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com