2014-05-17 82 views
0

我有一個模型,看起來像:NoMethodError顯示問題

class Product < ActiveRecord::Base 

    before_create :generate_token 

    def to_param 
    token 
    end 

    private 

    def generate_token 

    self.token = loop do 
     random_token = SecureRandom.urlsafe_base64(10, false) 
     break random_token unless Product.exists?(token: random_token) 
    end 
    end 

end 

我的控制器看起來像:

def set_product 
    @product = Product.find_by(token: params[:token]) 
end 

當我創建一個新的產品,我得到的錯誤:

NoMethodError in ProductsController#show 
undefined method `name' for nil:NilClass 

和我在我的控制器中的顯示看起來像:

def show 
    @title = @product.name 
end 

我創建的樣子:

def create 
@product = Product.new(product_params) 
#@product.user_id = current_user.id 
respond_to do |format| 
    if @product.save 
    format.html { redirect_to @product, notice: 'Product was successfully created.' } 
    format.json { render action: 'show', status: :created, location: @product } 
    else 
    format.html { render action: 'new' } 
    format.json { render json: @product.errors, status: :unprocessable_entity } 
    end 
end 
end 

而且,在我的控制器我有一個回調,看起來像:

before_action :set_product, only: [:show, :edit, :update, :destroy] 

但是在軌控制檯插入,它顯示了正在插入的名稱。名稱列正在設置。

+0

發佈您的「創建」動作 –

+0

錯誤來自您的「show」動作。 '@ product'是'nil'。但首先發布你的控制器 –

回答

2

你能告訴我您的網址進入該頁面

,如果你是product_path傳遞標誌(標誌)

然後嘗試

def set_product 
    @product = Product.find_by(token: params[:id]) # id instead of token 
end 

,如果它是一個表單,然後

def set_product 
    @product = Product.find_by(token: params[:product][:token]) 
end 

我是學前班確定您當前的params [:token]是不正確的,這就是爲什麼您cann找到產品。