gpt4 book ai didi

ruby-on-rails - 如何在Rails 3中使用带有has_many关联的fields_for分配值

转载 作者:行者123 更新时间:2023-12-02 04:11:19 28 4
gpt4 key购买 nike

我有2个型号,如下所述。我要这样做,以便用户创建产品时,他们必须从类别表中存在的类别中进行选择。

表格:

产品:ID,名称

类别:ID,名称

category_products:category_id,product_id

class Product
has_and_belongs_to_many :categories
accepts_nested_attributes_for :categories
end

class Category
has_and_belongs_to_many :products
end

class ProductsController < ApplicationController
def new
@product = Product.new
@product.categories.build
end

def create
@product = Product.new(params[:product])
if @product.save
redirect_to @product, :notice => "Successfully created product."
else
render :action => 'new'
end
end
end

查看/产品/new.haml
= form_for @product do |f|
= f.text_field :name
= f.fields_for :categories do |cat_form|
= cat_form.collection_select :id, Category.all, :id, :name, :prompt => true

但是,这失败了,并给了我:
找不到ID为3的产品的ID为3的类别

我只想在创建产品时将现有类别分配给产品。是否有捷径可寻?

最佳答案

如果您实际上是从表单中更新accepts_nested_attributes_for,则只需要使用categories。如果您要做的只是选择一个类别来添加新产品,则可以简化以下操作:

class Product
belongs_to :category
end

class Category
has_many :products
end

class ProductsController < ApplicationController
def new
@product = Product.new
end

def create
@product = Product.new(params[:product])
if @product.save
redirect_to @product, :notice => "Successfully created product."
else
render :action => 'new'
end
end
end

如果仅将产品分配给一个类别,则它们之间不需要多对多的关系。

至于观点:
= form_for @product do |f|
= f.text_field :name
= f.collection_select :category_id, Category.all, :id, :name, :prompt => true

关于ruby-on-rails - 如何在Rails 3中使用带有has_many关联的fields_for分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5036243/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com