出现错误:
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_path
为GET
路由。
所以你需要在你的表单中改变路由为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#new
是GET
请求,用于加载表单。
images#create
是POST
请求,用于提交表单。
修改你的代码,将: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 %