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 个(eventnameeventdateeventimage)上工作正常,但是在添加其他 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 等等——它的流动性更好。