Rails未定义的方法

时间:2015-10-02 16:09:37

标签: ruby-on-rails erb

我已经知道有很多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 个答案:

答案 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等 - 它只是更好地流动。