我的模型看起来像:
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]
但是在rails控制台插入中,它显示了正在插入的名称。正在设置名称列。
答案 0 :(得分: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]不对,这就是你找不到产品的原因。