我在插件中定义了以下方法:
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}}
}
答案 0 :(得分:0)
您的代码有几个问题,其中一些是违反Ruby的语法规则,而另一些则违反了Rails的返回值要求。
您当前错误的原因是语法错误。必须在与lambda
方法相同的行中定义lambda的块。
现在,如果您已修复此问题,您将注意到在使用范围后,您的代码将抛出其他异常。原因是范围的返回值应该是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)
}
答案 1 :(得分:0)
您的代码有几个问题,其中一些是违反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架构 我如何理解RAILS w.r.t Redmine Tool的核心功能?它使用的mysql默认数据库目前有一个非常庞大的模型结构。可以减少它来理解Rails的核心功能吗?