Ruby on rails rake任务中gems多元变量的重构模型
我是一个早期的ruby开发者,如果这是显而易见的,请原谅 使用GiocoGem来实现一个游戏化概念,我重命名了一些类和引用,以更好地适应项目(测试了所有内容,并且工作正常) 有问题的重命名是Kind=>BadgeKind 在以下任务中单击此行:Ruby on rails rake任务中gems多元变量的重构模型,ruby-on-rails,ruby,Ruby On Rails,Ruby,我是一个早期的ruby开发者,如果这是显而易见的,请原谅 使用GiocoGem来实现一个游戏化概念,我重命名了一些类和引用,以更好地适应项目(测试了所有内容,并且工作正常) 有问题的重命名是Kind=>BadgeKind 在以下任务中单击此行: r.points types.id,:value=>'{args.points}}}) 种类.id背后的概念是什么?我该如何解决这个问题? 错误: namererror:main:Object的未定义局部变量或方法“种类” 我试过:badge\u-kin
r.points types.id,:value=>'{args.points}}})
种类.id背后的概念是什么?我该如何解决这个问题?
错误:
namererror:main:Object的未定义局部变量或方法“种类”
我试过:badge\u-kind
,badge\u-kinds
任务:
task:add|u badge,[:name,:points,:kind,:default]=>:environment do | t,args|
arg_default=(args.default)?eval(args.default):false
如果!args.name | |!args.points | |!阿格斯金
提出“缺少一些参数”
其他的
badge_string=“kind=BadgeKind.find_或_create_by(名称:'{args.kind}')\n”
badge_string=badge_string+“badge=badge.create({
:name=>“#{args.name}”,
:points=>“#{args.points}”,
:badge\u kind\u id=>kind.id,
:default=>“#{arg_default}”
})
"
如果arg_为默认值
#正在将User.find(:all)更改为User.all
badge\u string=badge\u string+'resources=User.all
'
badge_string=badge_string+“资源。每个do|r|
r、 points types.id,:value=>'#{args.points}'})
r、 badges应用程序中似乎已经有了Kind
和Badge
的表。如果是这样,那么将Badge
重命名为BadgeKind
不是一个好主意。原因是此符号通常用于联接表,并且看起来您可能会与其中一个发生冲突。现在,我猜Badge
可以有种类
,反之亦然。为了实现这一点,可能会有一个BadgeKind
表包含它们的关系。如果没有查看架构文件或迁移,我无法确定,但您最好还是保持原样,或者至少选择不同的方式名称类似于BadgeType
另外,值得注意的是,构建要使用eval执行的字符串被认为是一种反模式。eval速度很慢,而且会使应用程序暴露于恶意代码注入。您的风险较小,因为这似乎是一项rake任务,但即使如此,如果您重构此代码,您也应该尝试不同的策略。看起来会重构相对简单。你到底为什么要使用eval?这段代码不是我的。它来自gioco gem。我只是替换了一些标识符。没有必要snark,maxcal。MINASWAN,记住?eval是危险的,因为有人可能会将精心编制的字符串传递到你网站上的表单,然后开始在表单上任意执行代码您的服务器,所以我们不使用该方法。但听起来好像它不是您的代码。
task :add_badge, [:name, :points, :kind, :default] => :environment do |t, args|
arg_default = ( args.default ) ? eval(args.default) : false
if !args.name || !args.points || !args.kind
raise "There are missing some arguments"
else
badge_string = "kind = BadgeKind.find_or_create_by(name: '#{args.kind}')\n"
badge_string = badge_string + "badge = Badge.create({
:name => '#{args.name}',
:points => '#{args.points}',
:badge_kind_id => kind.id,
:default => '#{arg_default}'
})
"
if arg_default
# changing User.find(:all) to User.all
badge_string = badge_string + 'resources = User.all
'
badge_string = badge_string + "resources.each do |r|
r.points << Point.create({ :badge_kind_id => kinds.id, :value => '#{args.points}'})
r.badges << badge
r.save!
end
"
end
badge_string = badge_string + "puts '> Badge successfully created'"
# puts "badge_string:\n" + badge_string
eval badge_string
end