我刚刚开始使用新应用,我希望在表单中获取邮政编码并将其保存到数据库中。我的问题是,无论我尝试什么,创建动作似乎都没有被调用。
路线:
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
中传递更多选项,例如方法和操作,现在我觉得这是一个路由错误。
任何帮助将不胜感激。
感谢。
答案 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>
代码,其中包含正确的网址和“帖子”所需的action
和method
属性,以便调用您的create
操作。