Rails 4强参数 - 更新时堆栈级别太深

时间:2013-01-26 19:36:01

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

我一直在使用Rails 4并且在使用强参数更新记录时遇到了一些问题。我一直收到“Stack Level Too Deep”错误。我正在尝试更新has_one meta_data的帖子记录。

post.rb

  has_one :meta_data, :as => :meta_dataeable, :dependent => :destroy
  accepts_nested_attributes_for :meta_data
  after_initialize do
    self.build_meta_data unless self.meta_data.present?
  end

posts_controller.rb

def create
  @post = Post.create(permitted_params)
  redirect_to :action => 'index'
end

def update
  @post = Post.find(params[:id])
  @post.update_attributes(permitted_params)
  redirect_to :action => 'index'
end

def permitted_params
  params.require(:post).permit(
    :title, 
    :body, 
    :excerpt, 
    :permalink, 
    :content_type, 
    :author_id, 
    :media, 
    :commenting, 
    :published_at, 
    :public, 
    {:meta_data_attributes => [:title, :description, :keywords, :menu_name]}
  )    
end

创建新记录可以正常运行并保存关联的meta_data记录。更新给我一个Stack Level Too Deep错误。当我从允许的参数中删除{:meta_data_attributes => [:title, :description, :keywords, :menu_name]}时,保存工作没有问题

任何帮助都会很棒,提前谢谢你!

1 个答案:

答案 0 :(得分:2)

想出问题,需要添加:id作为meta_data_attributes的允许参数。