因此,我有一个形式部分,开头为:
<%= form_for(@merchandise) do |f| %>
它非常适合编辑我在rails控制台中分配的数据。当我尝试将它用于创建新商品的“新”形式时(在这种情况下是单数形式的商品,我没有嵌套资源,多个模型等),我得到一个没有声明的方法错误
"undefined method 'merchandises_path' for #<#<Class:0x64eaef0>:0x95d2370>".
当我在form_for方法中明确说明URL时:
<%= form_for(@merchandise url:new_merchandise_path) do |f| %>
我得到它打开,我终于可以访问该表单,但在这种情况下,我收到一个路由错误,指出
"No route matches [POST] "merchandise/new""
。
我决定在我之前刚刚拥有的路线文件中写出该路线: root“商品#index”资源:商品
添加路线后,它实际上什么也没做。我点击提交,它将我带到表单,但数据库中没有新数据。我完全失去了,并且已经在这里玩了几个小时谷歌搜索和堆栈溢出,我只是不知道该怎么做。所有帮助都非常感谢。我在以下网址中添加了一个带有我所有代码的pastebin:
答案 0 :(得分:1)
我有两种方法可以解决它:
选项1:
请尝试在Rails中执行此操作:
<强>的routes.rb 强>
更改您的路线使用复数
resources :merchandises
<强> merchandises_controller.rb 强>
将文件控制器和类重命名为MerchandisesController
class MerchandisesController < ApplicationController
def index
@merchandise = Merchandise.all
end
def new
@merchandise = Merchandise.new
end
def create
@merchandise = Merchandise.new(merchandise_params)
if @merchandise.save
redirect_to merchandises_path
else
render :new
end
end
def show
@merchandise = Merchandise.find(params[:id])
end
def edit
@merchandise = Merchandise.find(params[:id])
end
def update
@merchandise = Merchandise.find(params[:id])
if @merchandise.update(merchandise_params)
redirect_to @merchandise, notice: "The movie was updated"
else
render :edit
end
end
def merchandise_params
params.require(:merchandise).permit(:shipper, :cosignee, :country_arrival_date, :warehouse_arrival_date, :carrier, :tracking_number, :pieces, :palets, :width, :height, :length, :weight, :description, :cargo_location, :tally_number, :customs_ref_number, :released_date, :updated_by, :country_shipped_to, :country_shipped_from)
end
end
选项2:
如果您不想更改许多代码
<强> /merchandise/_form.html.erb 强>
部分文件中的
<强> /merchandise/new.html.erb 强>
<%= render 'form', url: merchandise_path, method: 'post' %>
<强> /merchandise/edit.html.erb 强>
<%= render 'form', url: category_path(@merchendise.id), method: 'put' %>