我按照这些问题(one和two)了解了如何仅使用当前用户调整我的方法,以便他们拥有特定的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
然后是设计用户模型:
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中的NoMethodError #create
undefined method `user=' for nil:NilClass
我错过了什么或做错了什么?
提前致谢!
答案 0 :(得分:2)
您正在尝试在拥有产品之前分配@ product.user。首先找到产品,然后分配用户。
@product = Product.find(params[:id])
@product.user = current_user
对于除了要将产品限制为current_user之外的其他操作,您可以执行以下操作(假设您在has_many :products
模型中设置了User
关联。
@product = current_user.products.find(params[:id])
这将限制查找只有user_id等于current_user的产品。