简单表单不发布到DB Rails

时间:2015-09-20 19:09:56

标签: ruby-on-rails

我有一个简单的表格,如下所示

namespace X
{
    class A
    {
        // class code here
    }

    private class B
    {
        // class code here
    }
}

我的控制器就是这个

<% 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) do |f| %>
     <%= f.input :eventname, required: true %>
     <%= f.input :eventdate %>
     <%= f.input :eventimage %>
     <%= f.button :submit %>
  <% end %>
</div>

这是我的模特

class AddController < ApplicationController
  def index
    @newevent = Newevent.new
  end
end

关于为什么这不起作用的任何想法?我没有尝试添加任何撬或by,因为我还没有100%确定如何使用它们。

2 个答案:

答案 0 :(得分:2)

<强>机智

首先,您需要了解resourceful nature of Rails

enter image description here

您目前正在使用以下内容:

class AddController < ApplicationController
  def index
    @newevent = Newevent.new
  end
end

这违反了惯例,可能是导致该问题的原因之一。我会使用以下内容:

#config/routes.rb
resources :events

#app/controllers/events_controller.rb
class EventsController < ActionController::Base
   def new
       @event = Event.new
   end
   def create
       @event = Event.new event_params
       @event.save
   end
end

这一点很重要的原因是因为form_forsimple_form_for等助手是围绕Ruby和Rails的面向对象特性构建的。

当你使用simple_form_for(@event)时,它不是黑暗中的镜头 - 帮助者尽力将对象翻译成HTML表单。

如果对象不符合约定(IE没有create路由/操作),那么您将遇到问题。

<强>控制器

其次,您需要考虑您在控制器中实际执行的操作

您已经为我们提供了一个仅设置新对象的控制器操作。它没有对该对象做任何事情,这是保存到数据库实际可行的地方。

你需要这样的东西:

#app/controllers/events_controller.rb
class EventsController < ActionController::Base
   def new
       @event = Event.new
   end

   def create
       @event = Event.new event_params
       @event.save #-> add some conditional logic for if the event is saved etc
   end

   def show
       @event = Event.find params[:id]
   end

   private

    def event_params
      params.require(:newevents).permit(:eventname, :eventdate, :eventimage)
    end
end

这将使您能够创建以下视图:

#app/views/events/new.html.erb -> yoururl.com/events/new
<%= simple_form_for(@event) do |f| %>
     <%= f.input :name, required: true %>
     <%= f.input :date %>
     <%= f.input :image %>
     <%= f.submit %>
<% end %>

#app/views/events/show.html.erb
<%= @event.name %>

这将伴随您的Event型号:

#app/models/event.rb
class Event < ActiveRecord::Base
end

<强>表格

第三,您需要确保您的表单正确提交。

我认为您需要将<%= f.button %>更改为<%= f.submit %>。这将创建正确的HTML表单元素,这些元素应该正确提交。

答案 1 :(得分:0)

您的代码中存在多个错误。

首先,您将event_params放在模型中,但您的模型不知道params是什么。您可以访问控制器中的请求params,而不是模型中的请求。

其次,您的视图有一个可能会发送到创建操作的表单(因为这是新对象周围的表单的Rails中的默认设置。并且您的控制器中不仅没有创建操作,而且没有证据表明它的路线以及执行模型创建的代码。

最后但并非最不重要的是,您永远不会访问控制器中的请求参数。

你只是把几行代码粘在一起,你假装它们会神奇地工作,但是从代码中你似乎根本不知道Rails是如何工作的。

在继续您的应用程序之前,我建议您通过阅读有关Ruby的书籍和关于Rails的书籍从基础开始,以便在尝试使用它之前,您将对语言和框架的工作方式有基本的了解。

此外,在了解主框架的工作原理之前,不要引入额外的复杂性(例如简单的表单插件),否则调试问题会更加复杂。

相关问题