Rails:如何将提交按钮连接到控制器的操作以将数据添加/插入数据库?

时间:2018-01-15 21:31:18

标签: javascript forms ruby-on-rails-4

addPerson.html.erb 文件,用户可以在其中填写表单并提交。

<%= form_for @person do |form| %>
<%= form.label :first_name %><%= form.text_field :fName %>
<%= form.label :middle_name %><%= form.text_field :mName %>
<%= form.label :last_name %><%= form.text_field :lName %>
<%= form.submit "Add New Person" %>

people.rb控制器文件名

def addPerson

//code to push form data into database

end

我有一个用户可以填写并提交的表单。一旦用户点击提交按钮,我想在数据库中推送填充的数据。如何使用java脚本事件和控制器的操作在数据库中添加数据?

1 个答案:

答案 0 :(得分:0)

结帐Michael Hartles免费获取Ruby on Rails的书籍https://www.railstutorial.org/book它拥有在Rails中构建您的第一个Web应用程序所需的一切。

至于您的帖子,你需要一些东西,例如new.html.erb模板和_form.html.erb模板,然后在你的控制器中你需要一个新的创建动作来保存表格。

你应该考虑使用person之外的其他内容,因为当rails将其复数为persons时,它听起来很奇怪。应该使用userusers等内容。

你也可能只想运行这个脚手架命令,它会为你自动生成所有文件,如控制器,模型,视图等......这样你就可以看到一切都是如何连接的。

尝试运行rails g scaffold user first_name:string last_name:string middle_name:string
然后运行rails db:migrate请注意,如果您正在使用rails 4,请改用rake命令。所以rake g scaffold blah blah...rake db:migrate

在这里看看你的班级应该如何看待。这只是其中的一部分,您需要设置正确的路径,并在数据库中创建列。最好运行一个脚手架命令,它会为你设置一切,然后查看Hartles的书,看看它是如何工作的。

class PersonsController < ApplicationController

  before_action :set_person, only: [:show, :edit, :update, :destroy]

  def index
    @persons = person.all
  end

  def show
  end

  def new
    @person = @person.new
  end

  def edit
  end


  def create
    @person = @person.new(person_params)

    respond_to do |format|
      if @person.save
        format.html { redirect_to persons_path(@person), notice: 'Person was successfully created.' }
        format.json { render :show, status: :created, location: @person }
      else
        format.html { render :new }
        format.json { render json: @person.errors, status: :unprocessable_entity }
      end
    end
  end


  def update
    respond_to do |format|
      if @person.update(person_params)
        format.html { redirect_to persons_path(@person), notice: 'Person was successfully updated.' }
        format.json { render :show, status: :ok, location: @person }
      else
        format.html { render :edit }
        format.json { render json: @person.errors, status: :unprocessable_entity }
      end
    end
  end


  def destroy
    @person.destroy
    respond_to do |format|
      format.html { redirect_to person_url(@person), notice: 'Person was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  #######################
  # private methods
  #######################
  private

    def set_person
      @person = Person.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def patent_params
      params.require(:person).permit(:first_name, :middle_name, :last_name)
    end
end