尝试创建新对象时,Form_for给我一个无方法错误

时间:2015-09-21 03:56:32

标签: ruby-on-rails

因此,我有一个形式部分,开头为:

<%= 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:

http://pastebin.com/HDJdTMDt

1 个答案:

答案 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' %>