我有照片和产品型号。
在产品控制器的创建操作中,我想找到所有未关联的照片并将它们连接到当前产品。我正在尝试查找属于当前用户的所有照片,产品ID为零。
然后,对于每张照片,我都会将产品ID设置为@ product.id
我该怎么办?
def create
@product = current_user.products.create(params[:product])
if @product.save
render "show", notice: "Product created!"
# code here
else
render "new", error: "Error submitting product"
end
end
def current_user
@current_user ||= User.find_by_auth_token(cookies[:auth_token])
end
schema.rb
create_table "photos", :force => true do |t|
t.integer "product_id"
t.integer "user_id"
end
create_table "products", :force => true do |t|
t.string "name"
t.integer "user_id"
end
答案 0 :(得分:1)
首先,您应该使用构建而不是创建来构建产品实例,否则以下行if @product.save
将毫无意义。所以代码应该是这样的:
def create
@product = current_user.products.build(params[:product]) # using build to construct the instance
if @product.save
render "show", notice: "Product created!"
# Update un-related Photos
Photo.where(:product_id => nil).update_all(:product_id => @product.id)
else
render "new", error: "Error submitting product"
end
end
答案 1 :(得分:1)
对于组织,您应该在Product
模型中执行此操作:
class Product
before_save :set_unassigned_photos
def set_unassigned_photos
self.photos = user.photos.unassigned
end
并在Photo
模型中:
class Photo
scope :unassigned, where(product_id: nil)
这样你就可以遵循瘦控制器胖模型“建议”。您的控制器将保持不变。