Rails 未定义的方法
Rails Undefined method
我已经知道有很多 undefined method
问题,但我看不出我的问题是什么,所以我需要一些帮助!
这是我的表格
<% title("Home Page") %>
<h1><i class="fa fa-home"></i> Add Event <small>views/pages/home.html.erb</small></h1>
<div class="row">
<%= simple_form_for Newevent.new do |f| %>
<%= f.input :eventname, required: true %>
<%= f.input :eventdesc %>
<%= f.input :eventdate %>
<%= f.input :eventimage %>
<div class="col s6">
<%= f.input :stubhublink %>
<%= f.input :seatwavelink %>
<%= f.input :viagogolink %>
</div>
<%= f.button :submit %>
<% end %>
</div>
我在控制器里也有这个
def create
create_params = params[:newevent].permit(:eventname, :eventdesc, :eventdate, :eventimage, :viagogolink, :seatwavelink, :stubhublink)
@newevent = Newevent.new(create_params)
byebug
@newevent.save!
end
模型中的这个
class Newevent < ActiveRecord::Base
def params
params.require(:newevent).permit(:eventname, :eventdesc, :eventdate, :eventimage, :viagogolink, :seatwavelink, :stubhublink )
end
end
它在 3 个(eventname
、eventdate
和 eventimage
)上工作正常,但是在添加其他 4 个后现在不起作用。有任何想法吗?
抱歉,这里是错误!
NoMethodError in Newevents#new
Showing /Users/samroberts/Desktop/admitme/app/views/newevents/new.html.erb where line #6 raised:
undefined method `eventdesc` for #<Newevent:0x007fcaeee41f68>
山姆
这里有几个问题哥们:
1. eventdesc
失踪
您的错误的简单解释是您的 NewEvent
模型的 table.
中缺少您的 eventdesc
属性
由于我们没有您的 table - 或迁移 - 可以观察,我将不得不给您一个简单的测试:
<%= simple_form_for Newevent.new do |f| %>
<%= f.input :eventname, required: true %>
<%= f.input :eventdesc %> #-> remove this line
...
删除它,刷新页面,看看它是否有效。如果错误仍然存在,则可能意味着缺少另一个属性。如果它消失了,这意味着你的数据库中缺少这个属性,因此你应该使用 rails g migration
来创建一个新的:
$ rails g migration AddEventDesc
#db/migrate/add_event_desc_xxxxxxxx.rb
class AddEventDesc
def change
add_column :new_events, :eventdesc, :string
end
end
2。参数
Rails 4 基础架构的一部分是使用 strong params
将数据从您的控制器传递到模型。
因此,您需要以下语法:
#app/controllers/new_events_controller.rb
class NewEventsController < ApplicationController
def new
@newevent = NewEvent.new
end
def create
@newevent = NewEvent.new new_event_params
@newevent.save
end
private
def new_event_params #-> you can call this whatever you like
params.require(:newevent).permit(:eventname, :eventdesc, :eventdate, :eventimage, :viagogolink, :seatwavelink, :stubhublink )
end
end
你需要在你的控制器中保留你的强参数函数,而不是你的模型。
3。型号名称
最后,这不会直接对你有多大帮助,但从长远来看 运行 会对你有很大帮助;您的型号名称。
您的模特是NewEvent
。
如果这是您想要的称呼,那很好。但是,我发现使用模型名称的最佳方法是保持简单,最好是一个词。
我强烈建议将您的模型命名为 Event
,这样您就可以调用 @event = Event.new
等等——它的流动性更好。
我已经知道有很多 undefined method
问题,但我看不出我的问题是什么,所以我需要一些帮助!
这是我的表格
<% title("Home Page") %>
<h1><i class="fa fa-home"></i> Add Event <small>views/pages/home.html.erb</small></h1>
<div class="row">
<%= simple_form_for Newevent.new do |f| %>
<%= f.input :eventname, required: true %>
<%= f.input :eventdesc %>
<%= f.input :eventdate %>
<%= f.input :eventimage %>
<div class="col s6">
<%= f.input :stubhublink %>
<%= f.input :seatwavelink %>
<%= f.input :viagogolink %>
</div>
<%= f.button :submit %>
<% end %>
</div>
我在控制器里也有这个
def create
create_params = params[:newevent].permit(:eventname, :eventdesc, :eventdate, :eventimage, :viagogolink, :seatwavelink, :stubhublink)
@newevent = Newevent.new(create_params)
byebug
@newevent.save!
end
模型中的这个
class Newevent < ActiveRecord::Base
def params
params.require(:newevent).permit(:eventname, :eventdesc, :eventdate, :eventimage, :viagogolink, :seatwavelink, :stubhublink )
end
end
它在 3 个(eventname
、eventdate
和 eventimage
)上工作正常,但是在添加其他 4 个后现在不起作用。有任何想法吗?
抱歉,这里是错误!
NoMethodError in Newevents#new
Showing /Users/samroberts/Desktop/admitme/app/views/newevents/new.html.erb where line #6 raised:
undefined method `eventdesc` for #<Newevent:0x007fcaeee41f68>
山姆
这里有几个问题哥们:
1. eventdesc
失踪
您的错误的简单解释是您的 NewEvent
模型的 table.
eventdesc
属性
由于我们没有您的 table - 或迁移 - 可以观察,我将不得不给您一个简单的测试:
<%= simple_form_for Newevent.new do |f| %>
<%= f.input :eventname, required: true %>
<%= f.input :eventdesc %> #-> remove this line
...
删除它,刷新页面,看看它是否有效。如果错误仍然存在,则可能意味着缺少另一个属性。如果它消失了,这意味着你的数据库中缺少这个属性,因此你应该使用 rails g migration
来创建一个新的:
$ rails g migration AddEventDesc
#db/migrate/add_event_desc_xxxxxxxx.rb
class AddEventDesc
def change
add_column :new_events, :eventdesc, :string
end
end
2。参数
Rails 4 基础架构的一部分是使用 strong params
将数据从您的控制器传递到模型。
因此,您需要以下语法:
#app/controllers/new_events_controller.rb
class NewEventsController < ApplicationController
def new
@newevent = NewEvent.new
end
def create
@newevent = NewEvent.new new_event_params
@newevent.save
end
private
def new_event_params #-> you can call this whatever you like
params.require(:newevent).permit(:eventname, :eventdesc, :eventdate, :eventimage, :viagogolink, :seatwavelink, :stubhublink )
end
end
你需要在你的控制器中保留你的强参数函数,而不是你的模型。
3。型号名称
最后,这不会直接对你有多大帮助,但从长远来看 运行 会对你有很大帮助;您的型号名称。
您的模特是NewEvent
。
如果这是您想要的称呼,那很好。但是,我发现使用模型名称的最佳方法是保持简单,最好是一个词。
我强烈建议将您的模型命名为 Event
,这样您就可以调用 @event = Event.new
等等——它的流动性更好。