我试图将表单提交到ruby on rails上的现有数据库。我做了一些研究,但没有一个可行。这是我的表单:https://pastebin.com/JfXr054y
这是我的控制人员:
def landslide_params
params.require(:landslide).permit(:total_id, :year_id, :start_date, :end_date, :day_number, :continent, :country, :location, :type, :admin_level, :new_lat, :new_long, :mapped, :spatial_area, :fatalities, :injuries, :notes, :sources)
end
如何将表单链接到控制器。而且,表格的字段比表格列少,这是一个潜在的问题吗?谢谢!
答案 0 :(得分:4)
您对正在使用的代码中发生的事情的理解是多云的,因此我将审核您正在使用的术语以及首先表示的概念的范围:
<form>
元素和一系列输入元素,并以面向对象的编程以各种方式表示为表单对象。特别是,Rails没有关于如何或如何使用表单对象的意见或建议。 <form>
标记上,其中包含输入形式中的值。 关于您的问题,表单和控制器之间没有“链接”或控制器中的操作,但是当提交表单时,请求会触发可以处理请求的控制器操作。
您可以简单地访问参数,理想情况下使用StrongParams(如您所示),并可能创建一个ActiveRecord模型的实例来验证并保持数据库的输入。 Rails提供的ActiveRecord Basics Guide是了解更多关于事实上的方法的好地方。
是,可以使用提交不代表数据库列中某行的值的表单。由您的代码来处理它的外观。您可以拥有一个表单,该表单表示数据库中多个表中的多个行,或者表示十几个表中的单个列。
答案 1 :(得分:3)
好吧,拥有强大的参数很棒!你需要做几件事才能弄明白这一点。首先,是的,您只能在数据库中为EXISTING列提交信息。如果您通过强大的params(landslide_params)允许的所有属性都在数据库中,那么您应该没问题。如果没有,请创建一些迁移以添加它们:
rails g migration AddAttributesToLandSlide location:string fatalities:integer
等
其次,当你点击“提交”时,你必须弄清楚你将要发布到的控制器中的哪种方法。在你的表格上。我假设它将是landslide_controller中的create方法,或者沿着这些方向的东西。
通常,你会有一个新的&#39;传入一个空的Landslide.new对象的控制器中的方法,然后呈现表单/新的滑坡页面。在填写表格并点击提交后,Rails将带您进入创建方法,您可以使用所有属性保存滑坡。请记住,你必须
resources :landslides, only: [:new, :create]
在您的路线文件中,以便工作。
答案 2 :(得分:0)
您可以指定form_tag controller: 'your_controller', action: 'your_controller_action'
。
查看form_for
文档。我将它用于create
和update
,并根据我是否在new
或edit
视图中自动将其链接到控制器:
<%= form_for(@newsletter) do |f| %>