Во-первых, я хотел бы решить, будет ли каждый продукт содержится в категорию, или является ли это просто связано с категория. Подсказки в нем содержатся:
- Вы ожидаете, что каждый продукт будет иметь ровно одну «родительскую» категорию.
- Вы ожидаете, что каждый продукт всегда будет отображаться в контексте его родительской категории.
Если и только если вы уверены, что это дело, я был бы соблазн гнезда продукта ресурсов в пределах категории.
# 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
Если вы сделаете это, рельсы обеспечат соответствие вашего продукта соответствующей категории. Магия происходит в @category.products.build
, которая автоматически устанавливает category_id на основе отношения.
Если вы не хотите сохранить категории и продукты, как простые ассоциации, я бы просто использовать параметр запроса в соответствии с Эриком 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 %>
Это в основном просто стилистическая разница. Ответ Эрика тоже будет работать - я просто предпочитаю устанавливать значение самой модели, а не беспокоиться о параметрах и т. Д.
Вам нужно будет попытаться найти ответ самостоятельно, а затем попросить о помощи вместо того, чтобы просто попросить других найти ответ для вас. – Justin
проблема в том, что я уже пытался найти, как это сделать, но я не нашел то, что я действительно хотел. –