我正在尝试添加表单以在我的rails4应用程序中创建记录。不幸的是,当我提交记录时,会向数据库添加一条新记录,但所有列都是空的。我运行了rails控制台并通过散列(Location.new({...}))添加了位置记录,这非常有效,所以我知道控制器和模型工作。
您是否看到该视图或此代码的任何其他部分存在任何问题?我一直试图找到问题几个小时,但我被卡住了。这非常令人沮丧 - 请帮忙!
位置/ new.html.haml
render 'form'
添加记录的链接
= link_to 'Add Location', new_location_path
路由
resources :locations
_form.html.haml
= simple_form_for (@location) do |f|
.row
.large-6.columns
= f.input :name
.large-6.columns
= f.input :address
.large-6.columns
Location Name
.row
.large-6.columns
=f.input :state
.row
= f.button :submit
locations_controller.rb
def new
@location = Location.new
end
def create
@location = Location.new(subject_params)
if @location.save
redirect_to @location
else
render 'new'
end
end
private
def subject_params
params.permit(:name, :address, :state)
end
答案 0 :(得分:3)
在subject_params
中更新LocationsController
方法为:
def subject_params
params.require(:location).permit(:name, :address, :state)
end
在Rails 4
中,引入了Strong Parameters
。因此,您需要明确允许在数据库中插入/更新的属性。
在params
哈希中,:name
,:address
和:state
将存储为:location
密钥的键值对。
你错过了require(:location)
对params hash的调用,这就是为什么你的记录没有被传递的属性保存的原因。