我已经知道有很多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>
萨姆
答案 0 :(得分:0)
伙计们有几个问题:
<强> 1。 eventdesc
缺少
您的错误的简单解释是eventdesc
模型表中缺少NewEvent
属性。
由于我们没有观察您的表格或迁移,我将不得不给您一个简单的测试:
<%= 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。 PARAMS 强>
部分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
你需要在你的控制器中保持强大的params功能,而不是你的模型。
第3。型号名称
最后,这对你没有多大帮助,但从长远来看会对你有很大帮助;你的模特名字。
您的模型是NewEvent
。
如果您想要调用它,那就很好。但是,我发现使用模型名称的最佳方法是保持简单,最好是一个单词。
我强烈建议您调用模型Event
,这样您就可以调用@event = Event.new
等 - 它只是更好地流动。