创建未在表单

时间:2016-03-19 13:55:16

标签: ruby-on-rails ruby

我刚刚开始使用新应用,我希望在表单中获取邮政编码并将其保存到数据库中。我的问题是,无论我尝试什么,创建动作似乎都没有被调用。

路线:

root 'postcodes#new'
resources :postcodes, only: [:new ,:create]

Controller:postcodes_controller.rb

class PostcodesController < ApplicationController
  def new
    @postcode = Postcode.new
  end

  def create
    @postcode = Postcode.new(postcode_params)
    if @postcode.save
      flash[:success] = 'Success'
    else
      flash[:error] = 'Error'
    end
  end

  private

  def postcode_params
    params.require(:postcode).permit(:code)
  end
end

型号:postcode.rb

class Postcode < ApplicationRecord
  validates :code, presence: true, uniqueness: true
end

查看:postcodes / new.haml

.container
  %form
    %fieldset.form-group
      = form_for @postcode do |f|
          = f.label :postcode
          = f.text_field :code, placeholder: 'Example Postcode', class: 'form-control'
        = f.submit 'Submit', class: 'btn btn-primary'

我试图在form_for中传递更多选项,例如方法和操作,现在我觉得这是一个路由错误。

任何帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:1)

我相信您遇到的问题是您的HAML造成的。

您不需要在form_for方法调用之外使用,也不应该使用表单HTML元素。

form_for方法将处理为您生成此HTML元素/标记。

你有:

.container
  %form
    %fieldset.form-group
      = form_for @postcode do |f|
          = f.label :postcode
          = f.text_field :code, placeholder: 'Example Postcode', class: 'form-control'
        = f.submit 'Submit', class: 'btn ban-primary'

哪个输出空的<form>元素。

你应该:

.container        
  = form_for @postcode do |f|
   %fieldset.form-group  
     = f.label :postcode
     = f.text_field :code, placeholder: 'Example Postcode', class: 'form-control'
    = f.submit 'Submit', class: 'btn ban-primary'

这应生成一个正确的<form>代码,其中包含正确的网址和“帖子”所需的actionmethod属性,以便调用您的create操作。