【问题标题】:ArgumentError: The scope body needs to be callableArgumentError:范围主体需要可调用
【发布时间】:2017-01-10 10:20:31
【问题描述】:

我在插件中定义了以下方法:

class ReArtifactProperties < ActiveRecord::Base
  unloadable

  #attr_accessible :artifact_type

  scope :without_projects, :conditions => ["artifact_type != ?", 'Project']
  scope :of_project, lambda { |project|
    project_id = (project.is_a? Project) ? project.id : project
    {:conditions => {:project_id => project_id}}
  }

【问题讨论】:

  • 请不要发布错误图片。将它们复制到您的问题中,以便其他有相同问题的人可以找到它们。
  • 对不起先生。错误如下 SyntaxError: C:/Sites/redmine/plugins/redmine_re/app/models/re_artifact_properti es.rb:8: 语法错误,意外'|',期待'}' { |project| ^ C:/Sites/redmine/plugins/redmine_re/app/models/re_artifact_properties.rb:11:语法错误,意外'}',期待keyword_end
  • 将它们复制到您的问题中,以便其他有相同问题的人可以找到它们。
  • 你确定你满足 rails 和 redime 要求吗?
  • 我正在使用 windows 7 运行 redmine 和 ruby​​

标签: ruby-on-rails redmine


【解决方案1】:

您的代码有几个问题,其中一些违反了 Ruby 的语法规则,而另一些违反了 Rails 的返回值要求。

当前错误的原因是语法错误。 lambda 的块必须与lambda 方法在同一行中定义。

现在,如果您已解决此问题,您会注意到,一旦您使用范围,您的代码将引发其他异常。原因是作用域的返回值应该是一个 ActiveRecord 关系,而不仅仅是一个简单的 Hash。

因此,您的范围定义应该类似于:

scope :of_project, lambda { |project|
  project_id = (project.is_a? Project) ? project.id : project
  where(:project_id => project_id)
}

现在,鉴于 Rails 足够聪明,可以弄清楚如何从对象中获取 ID 以进行查询,您甚至可以摆脱其中的 project_id 逻辑,并将您的范围定义减少到

scope :of_project, lambda { |project|
  where(:project_id => project)
}

【讨论】:

  • 如前所述进行了更改,但仍然抛出争论错误
【解决方案2】:

您的代码有几个问题,其中一些违反了 Ruby 的语法规则,而另一些违反了 Rails 的返回值要求。

是的,你对 lambda 块的看法是正确的

最初的代码是:

scope :of_project, lambda { |project|
    project_id = (project.is_a? Project) ? project.id : project
    {:conditions => {:project_id => project_id}}
  }

修正后,缩小为:

scope :of_project, lambda { |project|
  project_id = (project.is_a? Project) ? project.id : project
  where(:project_id => project_id)
}

现在,鉴于 Rails 足够聪明,可以弄清楚如何从对象中获取 ID 以进行查询,

了解我从中学到的MVC架构

http://rubyonrails.org/

我如何理解RAILS w.r.t Redmine Tool的核心功能?它使用的mysql默认数据库目前具有非常庞大的模型结构。是否可以简化为理解Rails的核心功能?

【讨论】:

    猜你喜欢
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2011-12-07
    相关资源
    最近更新 更多