@ mymodel.user = current_user não está funcionando para mim

Eu segui estas perguntas ( uma e duas ) sobre como ajustar meus methods com o usuário atual apenas para que eles tenham o user_id específico para editar, atualizar, criar e destruir seus produtos.

Aqui está o meu código:

Minha migration:

class CreateProducts  0, :precision => 10, :scale => 2 t.integer :user_id t.float :latitude t.float :longitude 

o controlador:

 class ProductsController < ApplicationController before_filter :authenticate_user! def index @products = Product.all def show @product = Product.find(params[:id]) def new @product = Product.new def edit @product.user = current_user @product = Product.find(params[:id]) end def create @product.user = current_user @product = Product.new(params[:product]) def update @product.user = current_user @product = Product.find(params[:id]) def destroy @product.user = current_user @product = Product.find(params[:id]) @product.destroy 

Modelo do produto:

 class Product < ActiveRecord::Base attr_accessible :name, :date, :price, :tag_list belongs_to :user end 

então o modelo de usuário do Devise:

 class User  :destroy 

Eu tento enviá-lo e, de repente, isso aparece:

NoMethodError in ProductsController # create

 undefined method `user=' for nil:NilClass 

O que estou perdendo ou fazendo errado?

Desde já, obrigado!

Você está tentando atribuir @ product.user antes de ter um produto. Primeiro, ache o produto primeiro e atribua o usuário.

 @product = Product.find(params[:id]) @product.user = current_user 

Para as ações diferentes de create, onde você deseja restringir o produto ao current_user, é possível fazer algo assim (supondo que você tenha configurado a has_many :products association no seu modelo de User .

 @product = current_user.products.find(params[:id]) 

Isso restringirá a localização apenas para os produtos que possuem o user_id igual ao current_user.