2

我一直在玩 Rails 4,并且在使用强参数更新记录时遇到了一些问题。我不断收到“堆栈级别太深”错误。我正在尝试更新 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

post_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]}从允许的参数中删除时,保存工作没有问题

任何帮助都会很棒,在此先感谢您!

4

1 回答 1

2

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

于 2013-01-28T23:28:57.853 回答