【发布时间】:2015-11-10 00:11:51
【问题描述】:
我目前正在学习如何使用 faker gem 将数据植入我的项目中。我的项目是一个允许用户核对和添加项目的待办事项列表。我学会了如何创建自己的 RandomData,但在将 gem 改编到教程中时遇到了麻烦。我也不确定我是否正确地将其“改编”到教程中,所以我希望我能提供足够的信息。
运行rake db:reset时报错如下:
NameError: undefined local variable or method `user' for main:Object
itoff/db/seeds.rb:13:in `block in <top (required)>'
itoff/db/seeds.rb:11:in `times'
itoff/db/seeds.rb:11:in `<top (required)>'
我看到它在我的假物品循环中,但我不确定我做错了什么。请记住,我是 Ruby on Rails 的新手,所以如果我遗漏了一些明显的东西,我深表歉意。
使用设计和伪造的宝石。
(最后的问题:我能做的更好吗?我还应该努力/专注于什么才能在 ruby on rails 上做得更好?)
seeds.rb:
#Create fake user
5.times do
user = User.new(
email: Faker::Internet.email,
password: Faker::Lorem.characters(10)
)
user.skip_confirmation!
user.save!
end
#Create fake items
10.times do
item = Item.create!(
user: user.sample,
name: Faker::Lorem.sentence
)
end
puts "Seed finished"
puts "#{User.count} users created"
puts "#{Item.count} items created"
我的items_controller.rb:
class ItemsController < ApplicationController
def create
@item = current_user.items.new(item_params)
if @item.save
redirect_to current_user, notice: "Item was saved successfully."
else
flash[:error] = "Error creating item. Please try again."
render :new
end
end
def destroy
@item = Item.find(params[:id])
if @item.destroy
flash[:notice] = "\"#{@item.name}\" was deleted successfully."
redirect_to action: :index
else
flash[:error] = "There was an error deleting the item."
render :show
end
end
private
def item_params
params.require(:item).permit(:name)
end
end
item.rb:
class Item < ActiveRecord::Base
belongs_to :user
validates :description, presence: true
end
user.rb:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
has_many :items
end
【问题讨论】:
-
我的回答解决了你的问题吗?如果没有,您可以发布您遇到的新错误吗?
-
是的!对不起,我一直忙于学校工作。谢谢你的帮助!!!
标签: ruby-on-rails