在RoR中,如何在提交表单时避免使用此“未经许可的参数”?

时间:2016-07-20 21:12:07

标签: ruby-on-rails-4 parameters form-submit belongs-to

我正在使用Rails 4.2.4。在我的控制器中我有这个

  def update
    @user = current_user
    if @user.save_with_address(user_params)
    …
  end

  private

    def user_params
      params.require(:user).permit(:first_name, :last_name, :dob, :address, :automatic_import)
    end

在我的模型中(基于我的“users”表,其中我有“users.address_id”列),我有这个

class User < ActiveRecord::Base
  belongs_to :address
  attr_accessor :address

但是当我将表单提交给我的“更新”方法(如上所示)并带有以下数据时

Parameters: {"utf8"=>"✓", "authenticity_token"=>”tjLutbCuZUmLImSRnoRUCtcG8O0u070YixqjnMm5hmAZhn94fFte4jpWgB4hoOstiP9vJTj/c081EJ8NYnbMvg==", "user"=>{"first_name"=>"D.", "last_name"=>”LastName”, "dob(2i)"=>"", "dob(3i)"=>"", "dob(1i)"=>"", "address"=>{"city"=>"golden", "state"=>"3547", "country"=>"0"}, "automatic_import"=>"0"}, "commit"=>"Save", "id"=>"1"}

当调用我的“user_params”函数并且我的地址对象未保存为用户对象的一部分时,我收到“未经许可的参数:地址”消息。为避免这种情况,我需要采取哪些不同的结构?

1 个答案:

答案 0 :(得分:0)

由于地址是哈希,因此您必须指定其所有单独的字段。

params.require(:user).permit(:first_name, :last_name, address: [:city, :state, :country])