1

我有照片和产品模型。

在产品控制器的创建操作中,我想找到所有未关联的照片并将它们连接到当前产品。我正在尝试查找属于当前用户的产品 ID 为 nil 的所有照片。

然后对于每张照片,我会将产品 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

架构.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
4

2 回答 2

1

首先您应该使用build而不是create来构建 product 的实例,否则下面的行将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
于 2013-07-15T08:00:18.347 回答
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)

这样您就可以遵循瘦控制器胖模型“建议”。您的控制器将保持不变。

于 2013-07-15T08:01:02.153 回答