StaticPages#manager中的ArgumentError

时间:2015-09-30 08:42:47

标签: ruby-on-rails ruby

我的项目创建有问题。我有下一个错误:

ArgumentError in StaticPages#manager

Showing /home/verevkinra/apps/yurta24/app/views/items/_new.html.erb where line #2 raised:

First argument in form cannot contain nil or be empty

Extracted source (around line #2):
<h1>Items manage</h1>
<%= form_for @item do |f| %>
   <%= f.text_field :variable1 %>
   <%= f.text_field :variable2 %>
   <%= f.text_field :variable3 %>
   <%= f.text_field :variable4 %>

Trace of template inclusion: app/views/static_pages/manager.html.erb

Rails.root: /home/verevkinra/apps/yurta24

表单中的第一个参数在此代码的第二行(app / view / items / new.html.erb)中不能包含nil或为空:

<h1>Items manage</h1>
<%= form_for @item do |f| %>
   <%= f.text_field :variable1 %>
   <%= f.text_field :variable2 %>
   <%= f.text_field :variable3 %>
   <%= f.text_field :variable4 %>
   <%= f.text_field :value1 %>
   <%= f.text_field :value2 %>
   <%= f.text_field :value3 %>
   <%= f.text_field :value4 %>
   <%= f.text_field :comment %>

   <%= f.submit %>
<% end %>

我的Items_controller.rb是:

class ItemsController < ApplicationController

      def new
       @item = Item.new
    end
    def create
       @item = Item.new item_params
       @item.save
    end

    def destroy
         @item = Item.find(params[:id])
         @item.destroy
      end

    private

    def item_params
       params.require(:item).permit(:variable1, :variable2, :variable3, :variable4, :value1, :value2, :value3, :value4, :comment)
    end
end

我的数据库迁移文件是:

class CreateItems < ActiveRecord::Migration
  def change
    create_table @item do |t|
      t.string :variable1
      t.string :variable2
      t.string :variable3
      t.string :variable4
      t.string :value1
      t.string :value2
      t.string :value3
      t.string :value4
      t.string :comment

      t.timestamps null: false
    end
  end
end

我的routes.rb有下一行:

resources :items

由于

我的static_pages_controller.rb是:

class StaticPagesController < ApplicationController
  def home
    @contact_form = ContactForm.new 
  end

  def manager
    @contact_messages = ContactForm.all
    @item = Item.new
  end
end

@item = Item.new我现在正在添加,还有另一个错误:

NoMethodError in StaticPages#manager

Showing /home/verevkinra/apps/yurta24/app/views/items/_new.html.erb where line #8 raised:

undefined method `value2' for #<Item:0xb3ba6504>

Extracted source (around line #8):
   <%= f.text_field :variable4 %>
   <%= f.text_field :value1 %>
   <%= f.text_field :value2 %>
   <%= f.text_field :value3 %>
   <%= f.text_field :value4 %>
   <%= f.text_field :comment %>

Trace of template inclusion: app/views/static_pages/manager.html.erb

app / views / static_pages / manager.html.erb是:

<%= render 'contact_forms/new' %>
<%= render 'items/new' %>

3 个答案:

答案 0 :(得分:1)

  

表单中的第一个参数不能包含nil或为空

您正在app/views/items/_new.html.erb中呈现 部分 app/views/static_pages/manager.html.erb),因此您应该在{{1}中拥有@item = Item.new } manager

的方法
static_pages_controller.rb
  

项目的未定义方法“value2”:0xb3ba6504

#static_pages_controller.rb def manager @item = Item.new end 表中找不到该属性value2。使用以下命令创建迁移

items

将迁移文件中的rails g migration add_value2_to_items value2:string更改为create_table @item do |t|并执行create_table :items do |t|

答案 1 :(得分:1)

  

表单中的第一个参数不能包含nil或为空

您的变量@item未填充。

我在你更新之前开始写这个,所以我之后会添加修补程序......

app/views/static_pages/manager.html.erb

这告诉我们错误可能源自manager的{​​{1}}操作。具体来说,你可能没有在那里定义StaticPagesController ...

所以首先要做的是:

@item

-

使用更新的代码,这是新问题:

  

的未定义方法`value2'

这意味着您的#app/controllers/static_pages_controller.rb class StaticPagesController < ApplicationController def manager @item = Item.new end end 模型没有名为value2的属性。

有几种解决方案;底层修复是让您的Item名称正确排序。

attribute

从什么时候开始,模型有t.string :variable1 t.string :variable2 t.string :variable3 t.string :variable4 t.string :value1 t.string :value2 t.string :value3 t.string :value4 t.string :comment variable1等?

Ruby / Rails具有无与伦比的能力来调用对象,这意味着您将能够执行以下操作:variable2等...然后您调用{{1} }?

这些可能是您所需要的,但如果您为此添加它们,则需要重新考虑模型的构造。

也就是说,您需要重命名属性以更适合他们将要保留的数据。作为一名开发人员,您将获得进步。代码架构师。

<强>部分

最后,不要在部分内容中调用@item.name

部分意图在整个应用程序中调用,不应绑定到特定的数据结构。 Rails可以使用以下代码将本地变量传递给您的部分:

@item.variable1

答案 2 :(得分:0)

您应该显示StaticPages控制器,尤其是方法manager,这里缺少。此外,尝试最小化问题,以便仍然得到错误。

同时拥有堆栈跟踪会有所帮助。

更新:至少您的迁移有错误。它是create_table :itemscreate_table "items"