我有Categories
和Products
。产品有关系
belongs_to :category
在类别显示页面中,我有一个添加新产品的按钮。此按钮转到我创建新产品的页面,但我需要为新产品提供类别。
如何id
从category
我所在的页面传递到新产品?因此,如果我在该类别中,Electronic
我单击“添加产品”,该产品会自动与Eletronic
类别相关联。
希望你能明白我想要什么。谢谢
我有Categories
和Products
。产品有关系
belongs_to :category
在类别显示页面中,我有一个添加新产品的按钮。此按钮转到我创建新产品的页面,但我需要为新产品提供类别。
如何id
从category
我所在的页面传递到新产品?因此,如果我在该类别中,Electronic
我单击“添加产品”,该产品会自动与Eletronic
类别相关联。
希望你能明白我想要什么。谢谢
您需要category_id
在您的链接中传递 ,例如new_product_path(category_id: @category.id)
.
您还需要在产品表单中有一个字段来保存类别的 ID,例如<%= f.hidden_field :category_id, params[:category_id] %>
首先,我会决定每个产品是否包含在一个类别中,或者它是否只是与一个类别相关联。它包含的提示是:
当且仅当您认为是这种情况时,我很想将产品资源嵌套在类别中。
# routes.rb
resources :categories do
resources :products
end
# products_controller.rb (SIMPLIFIED!)
class ProductController < ApplicationController
before_filter :get_category
def new
@product = @category.products.build
end
def create
@product = @category.products.build(params[:product])
if @product.save
redirect_to @product
else
render template: "new"
end
end
def get_category
@category = Category.find(params[:category_id])
end
end
如果您这样做,rails 将确保您的产品与正确的类别相关联。魔术发生在 中@category.products.build
,它会根据关系自动设置 category_id。
如果您希望将类别和产品保持为简单的关联,我会按照 Eric Andres 的回答使用查询参数,尽管我很想以稍微不同的方式处理它:
# link:
new_product_path(category_id: @category.id) # So far, so similar.
# products_controller.rb
class ProductsController < ApplicationController
def new
@product = Product.new
@product.category_id = params[:category_id].to_i if params[:category_id]
end
end
# new.erb
<%= f.hidden_field :category_id %>
这主要只是风格上的差异。埃里克的回答也可以——我只是更喜欢在模型本身上设置值,而不是让视图担心参数等。