Rails解析后端的数据

时间:2013-07-15 07:45:43

标签: ruby-on-rails ruby

我有照片和产品型号。

在产品控制器的创建操作中,我想找到所有未关联的照片并将它们连接到当前产品。我正在尝试查找属于当前用户的所有照片,产品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

2 个答案:

答案 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)

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