ArgumentError: The scope body needs to be callable
ArgumentError: The scope body needs to be callable
我在插件中定义了以下方法:
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}}
}
您的代码有几个问题,其中一些违反了 Ruby 的语法规则,而另一些则违反了 Rails 的 return 值要求。
当前错误的原因是语法错误。 lambda 的块必须在与 lambda
方法相同的行中定义。
现在,如果您已修复此问题,您会注意到一旦您使用范围,您的代码就会抛出其他异常。原因是范围的 return 值应该是一个 ActiveRecord 关系,而不仅仅是一个简单的哈希。
因此,您的范围定义应与此类似:
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)
}
Your code has several issues, some of which are violations of syntax rules of Ruby, while others violate return value requirements of 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)
}
Now given that Rails is smart enough to figure out how to get the ID from an object for a query,
了解我从
学到的MVC架构
如何理解RAILS w.r.t Redmine Tool 的核心功能?它使用的mysql 默认数据库有一个非常庞大的模型结构currently.Could 将其简化以了解Rails? 的核心功能
我在插件中定义了以下方法:
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}}
}
您的代码有几个问题,其中一些违反了 Ruby 的语法规则,而另一些则违反了 Rails 的 return 值要求。
当前错误的原因是语法错误。 lambda 的块必须在与 lambda
方法相同的行中定义。
现在,如果您已修复此问题,您会注意到一旦您使用范围,您的代码就会抛出其他异常。原因是范围的 return 值应该是一个 ActiveRecord 关系,而不仅仅是一个简单的哈希。
因此,您的范围定义应与此类似:
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)
}
Your code has several issues, some of which are violations of syntax rules of Ruby, while others violate return value requirements of 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)
}
Now given that Rails is smart enough to figure out how to get the ID from an object for a query,
了解我从
学到的MVC架构 如何理解RAILS w.r.t Redmine Tool 的核心功能?它使用的mysql 默认数据库有一个非常庞大的模型结构currently.Could 将其简化以了解Rails? 的核心功能