Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rake任务中gems多元变量的重构模型_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails rake任务中gems多元变量的重构模型

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

我是一个早期的ruby开发者,如果这是显而易见的,请原谅

使用GiocoGem来实现一个游戏化概念,我重命名了一些类和引用,以更好地适应项目(测试了所有内容,并且工作正常)

有问题的重命名是Kind=>BadgeKind

在以下任务中单击此行:

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