没有与 [POST] "/admin/order/1/images/new"匹配的路由



出现错误:

No route matches [POST] "/admin/order/1/images/new" 

这些是我的关联

Order has many :images
Image belongs_to :order
<<p> 模式/strong>
create_table "images", force: :cascade do |t|
  t.integer "order_id"
  t.string  "image_url"
end

<%= form_tag new_admin_order_image_path(@order.id), enctype: 'multipart/form-data' do %>
  <%= file_field_tag :image  %>
  <%= submit_tag 'Upload image' %>
<% end %>
<<p> 路线/strong>
namespace :admin do
  resources :orders, only: [:edit, :index, :show, :update] do
    resources :images
  end
end
控制器

class Admin::ImagesController < AdminController
  def new
    @image =Image.new(
      image_url: 'nvm.jpg'
    )
    if @image.save
      redirect_to :back, success: 'File successfully uploaded'
    else
      flash.now[:notice] = 'There was an error'
      render :new
    end
  end
end

您正在使用POST方法命中new_admin_order_image_path。式中new_admin_order_image_pathGET路由。

所以你需要在你的表单中改变路由为admin_order_images_path(@order.id),它会点击Images#create action

<%= form_tag admin_order_images_path(@order.id), enctype: 'multipart/form-data' do %>

在控制器中创建一个create方法

class Admin::ImagesController < AdminController
  def new
    @image =Image.new
  end
  def create
    @image =Image.new(
      image_url: 'nvm.jpg'
    )
    if @image.save
      redirect_to :back, success: 'File successfully uploaded'
    else
      flash.now[:notice] = 'There was an error'
      render :new
    end
  end
end

您有两个与创建新记录相关的路由,可以通过运行rake routes来查看:

 order_images     POST  /admin/orders/:order_id/images(.:format)      images#create
 new_order_images GET   /admin/orders/:order_id/images/new(.:format)  images#new

images#newGET请求,用于加载表单。

images#createPOST请求,用于提交表单。

修改你的代码,将:new_admin_order_images_path改为:admin_order_images_path

你还需要在控制器中定义create动作,并在其中执行保存动作;不是new动作。类似以下语句:

class Admin::ImagesController < AdminController
  def new
    @image = order.find_by(params[:order_id]).images.new(
      image_url: 'nvm.jpg'
    )
   end
  def create
    if @image.save
      redirect_to :back, success: 'File successfully uploaded'
    else
      flash.now[:notice] = 'There was an error'
      render :new
    end
  end
end

你可以给你的'ImageController'添加一个创建操作,并把图像创建逻辑放在那里。目前你只有一个新动作,你保存图像在那里,你可以把它放在创建动作。

  def create
   @image =  Image.new({image_url: "image.png"})
   if @image.save 
     redirect_to root_url
   else 
     flash.now[:notice] = 'There was an error'
     render :new
  end

您已经将url从new_admin_order_image_path更改为admin_order_images(@order)。

 <%= form_tag admin_order_images(@order), enctype: 'multipart/form-data' do %>
   <%= file_field_tag :image  %>
   <%= submit_tag 'Upload image' %>
<% end %

最新更新