@ mymodel.user = current_user对我不起作用

问题描述

|| 我遵循了这些问题(一个和两个),仅关于如何与当前用户一起调整我的方法,以便他们拥有特定的user_id来编辑,更新,创建和销毁其产品。 这是我的代码: 我的迁移:
class CreateProducts < ActiveRecord::Migration
  def self.up
    create_table :products do |t|
      t.string :name
      t.date :date
      t.decimal  :price,:default => 0,:precision => 10,:scale => 2
      t.integer :user_id
      t.float :latitude
      t.float :longitude
控制器:
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
产品型号:
class Product < ActiveRecord::Base
    attr_accessible :name,:date,:price,:tag_list 
    belongs_to :user
end
然后是Devise用户模型:
class User < ActiveRecord::Base

  devise :database_authenticatable,:registerable,:recoverable,:rememberable,:trackable,:validatable
  attr_accessible :email,:password,:password_confirmation,:remember_me 

  has_many :products,:dependent => :destroy
我尝试提交它,然后突然弹出: ProductsController#create中的NoMethodError
undefined method `user=\' for nil:NilClass
我想念什么或做错什么? 提前致谢!     

解决方法

        您尝试在拥有产品之前分配@ product.user。首先在产品上查找您的内容,然后分配用户。
@product = Product.find(params[:id])
@product.user = current_user
对于除了将您的产品限制为current_user的创建之外的其他操作,您可以执行类似的操作(假设您在
User
模型中设置了
has_many :products
关联。
@product = current_user.products.find(params[:id])
这样会将查找限制为仅具有user_id等于current_user的那些产品。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...