我有一个简单的表格,如下所示
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%确定如何使用它们。
答案 0 :(得分:2)
<强>机智强>
首先,您需要了解resourceful nature of Rails:
您目前正在使用以下内容:
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_for
和simple_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的书籍从基础开始,以便在尝试使用它之前,您将对语言和框架的工作方式有基本的了解。
此外,在了解主框架的工作原理之前,不要引入额外的复杂性(例如简单的表单插件),否则调试问题会更加复杂。