将填写的表格保存到数据库 - Ruby rails

Save filled form to database - Ruby on rails

我正尝试在 rails 上向 ruby 中的现有数据库提交表单。我做了一些研究,但 none 的研究是有效的。这是我的表格: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

我怎样才能 link 将表单发送给控制器。而且,表单的字段少于 table 列,这是一个潜在的问题吗?谢谢!

好吧,有强大的参数真好!有几件事你必须做才能弄清楚让它工作。首先,是的,您只能将现有列的信息提交到数据库中。如果您通过强参数 (landslide_params) 允许的所有这些属性都在数据库中,那么您应该没问题。如果没有,请创建几个迁移以添加它们:

rails g migration AddAttributesToLandSlide location:string fatalities:integer

等等

其次,您必须弄清楚当您在表单上点击 'submit' 时,您将发布到控制器中的哪个方法。我假设它将是 landslide_controller 中的创建方法,或者类似的东西。

通常,您会在控制器中有一个 'new' 方法,该方法传入一个空的 Landslide.new 对象,然后呈现 form/new 滑坡页面。填写表格并点击提交后,Rails 将带您进入创建方法,您可以在其中保存具有所有属性的滑坡。

记住,你必须有

resources :landslides, only: [:new, :create]

在你的路由文件中让它工作。

您对正在使用的代码中发生的事情的理解是模糊的,所以我将回顾一下您正在使用的术语以及首先表示的概念的范围:

  • 一个形式是一个概念,在HTML中表示为<form>元素和一系列输入元素,在面向对象中表示以各种方式作为表单对象进行编程。 Rails,值得注意的是,对于如何使用表单对象或将其用于什么目的,没有意见或建议。
  • 一个数据库是一个使用接口处理数据存储和检索的软件;大多数关系数据库使用 SQL 作为接口。
  • 当您提交一个表单时,您指示您的浏览器创建一个 HTTP 请求<form> 标签上的 action 值,其中包含以 inputs[=46= 形式出现的 values ].
  • 当浏览器向您的 Rails 应用程序发送请求时,该应用程序会使用您的路由来确定如何处理该 请求
  • 在Rails中处理请求的常规方法是将其路由到控制器action.
  • 在 Rails 中,action 是通过在控制器上定义 method 创建的。

关于你的问题,表单和控制器之间没有“link”,也没有控制器中的动作,但是当提交表单时,请求会触发可以处理请求的控制器动作。

您可以简单地访问参数,最好使用 StrongParams(如您所示),并可能创建一个 ActiveRecord 模型的实例来验证输入并将其保存到数据库中。 Rails 提供的 ActiveRecord Basics Guide 是了解更多实际方法的好地方。

是的,有一个表单可以提交不代表数据库列中的行的值。由您的代码来处理它的外观。您可以拥有一个表示数据库中多个表中的多行的表单,或者一个只表示一打列中的一列的表单。

您可以指定form_tag controller: 'your_controller', action: 'your_controller_action'

查看 form_for 文档。我将它用于 createupdate,它会根据我处于 new 还是 edit 视图自动将其链接到控制器:

<%= form_for(@newsletter) do |f| %>