我在插件中定义了以下方法:
class ReArtifactProperties<的ActiveRecord :: Base的 卸
#attr_accessible:artifact_type
范围:without_projects,:conditions => [” ……
您的代码有几个问题,其中一些是违反Ruby语法规则的,另一些则违反了Rails的返回值要求。
您当前错误的原因是语法错误。必须在与lambda相同的行中定义lambda的块 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 其中的逻辑并将范围定义减少到
project_id
scope :of_project, lambda { |project| where(:project_id => project) }
是的,你对lambda块是正确的
最初的代码是:
scope :of_project, lambda { |project| project_id = (project.is_a? Project) ? project.id : project {:conditions => {:project_id => project_id}} }
更正后,它减少到这个:
现在假设Rails足够聪明,可以弄清楚如何从查询对象中获取ID,
了解我从中学到的MVC架构
http://rubyonrails.org/