Ruby on rails rails 4嵌套表单don';救不了
我知道这里已经有很多关于这个的开放性问题,但是没有一个真正帮助我 我的主模型被正确保存,所有数据都在post数据中,但它只是不保存嵌套模型 谢谢你。。是否与允许的参数或属性访问器有关?我怀疑。。我真的没有找到任何关于这个的文件 这是我的代码: 产品\u控制器.rbRuby 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,
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