Ruby on rails rails 4嵌套表单don';救不了

Ruby on rails rails 4嵌套表单don';救不了,ruby-on-rails,ruby,nested-forms,nested-attributes,Ruby On Rails,Ruby,Nested Forms,Nested Attributes,我知道这里已经有很多关于这个的开放性问题,但是没有一个真正帮助我 我的主模型被正确保存,所有数据都在post数据中,但它只是不保存嵌套模型 谢谢你。。是否与允许的参数或属性访问器有关?我怀疑。。我真的没有找到任何关于这个的文件 这是我的代码: 产品\u控制器.rb def product_params params.require(:product).permit(:title, :description, :netprice, :vat, :price, :unit_count,

我知道这里已经有很多关于这个的开放性问题,但是没有一个真正帮助我

我的主模型被正确保存,所有数据都在post数据中,但它只是不保存嵌套模型

谢谢你。。是否与允许的参数或属性访问器有关?我怀疑。。我真的没有找到任何关于这个的文件

这是我的代码:

产品\u控制器.rb

def product_params
    params.require(:product).permit(:title, :description, :netprice, :vat, :price, :unit_count,         :unit, :category, :img, :origin, :originid, :producer, :stock, :discount, :stories_attributes, :origins_attributes, :id)
    end
end

def new
    @product = Product.new
    3.times { @product.stories.build }
    @product.origins.build
    @categories = []
    Category.all.each do |category|
    @categories.push([category.name, category.name])
    end

end

def create
    @product = Product.new(product_params)
    respond_to do |format|
    if @product.save
        format.html { redirect_to @product, notice: 'Product was successfully created.' }
        format.json { render action: 'show', status: :created, location: @product }
    else
        format.html { render action: 'new' }
        format.json { render json: @product.errors, status: :unprocessable_entity }
    end
    end
end
origin.rb

class Origin < ActiveRecord::Base
belongs_to :product
end

产品参数
方法中有一个额外的
结束
。这应该引起一个错误

您还需要将
故事
起源
属性添加到许可证列表中:

def product_params
    params.require(:product).permit(:title, :description, :netprice, :vat, :price, :unit_count, :unit, :category, :img, :origin, :originid, :producer, :stock, :discount, stories_attributes: [:yindex, :description, :image], origins_attributes: [ :city, :country, :geolat], :id)
end
更新:将缺少的属性添加到
stories\u attributes
origins\u attributes
上的许可列表中:

def product_params
    params.require(:product).permit(:title, :description, :netprice, :vat, :price, :unit_count, :unit, :category, :img, :origin, :originid, :producer, :stock, :discount, stories_attributes: [:yindex, :description, :img, :product_id], origins_attributes: [ :city, :country, :geolat, :geolng], :id)
end
第二次更新:

您还需要更新产品型号,如下所示:

class Product < ActiveRecord::Base
  attr_accessible :stories_attributes, :origins_attributes
  ...
end

您的
product_参数
肯定包含
stories_属性
origins_属性
,并被正确地传递到
product.new
方法,但由于它们的属性不允许批量分配,因此您不会看到创建的相关
stories
origins
。请注意,
attr\u accessor
,一种Ruby方法,只为属性定义了
getter
setters
,但不允许大量赋值。

您的控制台中是否有任何错误?实际上,由于我为帖子将内容复制到一起的方式,结果刚刚到达那里。不过,感谢您提供有关许可证列表属性的提示。不幸的是,它仍然不起作用@经理,请看我的更新。
stores\u attributes
origins\u attributes
缺少一些属性。请试一试。好了,还是不行。我对名称进行了一些修复,并删除了控制台输出中的“unpermittedparameter”消息。但是还是不行。让我不舒服的是,SQL请求像往常一样非常好,只是不涉及嵌套属性。几乎就好像它甚至没有尝试保存嵌套的参数..我明白了!谢谢你的解释。不幸的是,这个问题仍然没有解决:我得到一个错误消息,即在rails 4中不再支持attr_accessible,并且已经过时。通过谷歌搜索,我发现强_参数实际上是一种新的方式,但我的理解是,这个params.require就是这样,所以我不知道为什么它不起作用!还有什么线索吗?无论如何,非常感谢你的帮助@我的错,我已经编辑了很多次了,我完全忘记了答案是Rails4。尝试将
stories\u属性
origins\u属性
attr\u访问器
行全部删除。
`attr_accessible` is extracted out of Rails into a gem. Please use new recommended protection      model for params(strong_parameters) or add `protected_attributes` to your Gemfile to use old one.
def product_params
    params.require(:product).permit(:title, :description, :netprice, :vat, :price, :unit_count, :unit, :category, :img, :origin, :originid, :producer, :stock, :discount, stories_attributes: [:yindex, :description, :image], origins_attributes: [ :city, :country, :geolat], :id)
end
def product_params
    params.require(:product).permit(:title, :description, :netprice, :vat, :price, :unit_count, :unit, :category, :img, :origin, :originid, :producer, :stock, :discount, stories_attributes: [:yindex, :description, :img, :product_id], origins_attributes: [ :city, :country, :geolat, :geolng], :id)
end
class Product < ActiveRecord::Base
  attr_accessible :stories_attributes, :origins_attributes
  ...
end
# ProductsController
def create
    @product = Product.new(product_params)
    ...
end