将填充的表单保存到数据库 - Ruby on rails

时间:2017-04-24 15:42:33

标签: ruby-on-rails sqlite form-submit

我试图将表单提交到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

如何将表单链接到控制器。而且,表格的字段比表格列少,这是一个潜在的问题吗?谢谢!

3 个答案:

答案 0 :(得分:4)

您对正在使用的代码中发生的事情的理解是多云的,因此我将审核您正在使用的术语以及首先表示的概念的范围:

  • 表单是一个概念,在HTML中表示为<form>元素和一系列输入元素,并以面向对象的编程以各种方式表示为表单对象。特别是,Rails没有关于如何或如何使用表单对象的意见或建议。
  • 数据库是一个使用接口处理数据存储和检索的软件;大多数关系数据库使用SQL作为接口。
  • 当您提交 表单时,您会指示您的浏览器为操作值创建HTTP 请求<form>标记上,其中包含输入形式中的
  • 当浏览器向您的Rails应用程序发送请求时,应用程序会使用您的路由来确定如何处理请求
  • 在Rails中处理请求的传统方法是将其路由到控制器 action
  • 在Rails中,通过在控制器上定义方法来创建操作

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

您可以简单地访问参数,理想情况下使用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文档。我将它用于createupdate,并根据我是否在newedit视图中自动将其链接到控制器:

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