Rails 4中未保存到db的值

时间:2014-04-04 16:09:45

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

我正在尝试添加表单以在我的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

1 个答案:

答案 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的调用,这就是为什么你的记录没有被传递的属性保存的原因。