@ mymodel.user = current_user не работает для меня - PullRequest
0 голосов
/ 18 июня 2011

Я следовал за этими вопросами ( 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

Я пытаюсь отправить его, а затем внезапно появляется это сообщение:

NoMethodError в ProductsController # create

undefined method `user=' for nil:NilClass

Что я пропускаю или делаю неправильно?

Заранее спасибо!

1 Ответ

2 голосов
/ 18 июня 2011

Вы пытаетесь назначить @ product.user, прежде чем у вас есть продукт.Сначала выполните поиск по продукту, затем назначьте пользователя.

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

Для действий, отличных от create, для которых вы хотите ограничить продукт текущим_пользователем, вы можете сделать что-то подобное (при условии, что вы настроилиhas_many :products ассоциация в вашей User модели.

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

Это ограничит поиск только теми продуктами, у которых user_id равен current_user.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...