我的项目创建有问题。我有下一个错误:
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' %>
答案 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 :items
或create_table "items"
。