将填写的表格保存到数据库 - 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
文档。我将它用于 create
和 update
,它会根据我处于 new
还是 edit
视图自动将其链接到控制器:
<%= form_for(@newsletter) do |f| %>
我正尝试在 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
文档。我将它用于 create
和 update
,它会根据我处于 new
还是 edit
视图自动将其链接到控制器:
<%= form_for(@newsletter) do |f| %>