【问题标题】:Ruby On Rails and redmine Aglie plugin fixingRuby On Rails 和 redmine Aglie 插件修复
【发布时间】:2015-02-12 16:35:05
【问题描述】:

好吧,也许你们知道,在 redmine 基础结构中,有表 issuesprojects。顺便说一句,我以前从未用 ruby​​ 编写代码。但是我有任务,所以。 这里是issues 表结构: 这是project 表结构: 问题是我还需要获取所有issues,其中project_id equals @project and project.parent_id equals @project。 问题是,首先我不明白当前的@project 内容是什么。其次,我不知道如何在这里访问@project 的 parent_id 字段。 Parent_id 顺便引用了 project.id 字段。

我在这里得到了 ruby​​ 函数。 老板说我需要编辑范围变量。所以我尝试像这样编辑它:

def find_no_version_issues
    @backlog_version = @project.versions.open.where("LOWER(#{Version.table_name}.name) LIKE LOWER(?)", "backlog").first ||
        @project.versions.open.where(:effective_date => nil).first ||
        Version.open.where(:project_id => @project).order("effective_date ASC").first

         @current_version = Version.open.
        where(:project_id => @project).
        where("#{Version.table_name}.id <> ?", @backlog_version).
        order("effective_date DEcSC").first

    q = (params[:q] || params[:term]).to_s.strip
    #scope = (params[:scope] == "all" || @project.nil? ? Issue : @project.issues).open.visible.where(:fixed_version_id => nil).sorted_by_rank
    scope = Issue.open.visible.where(:fixed_version_id => nil).where("project_id = ?", ) OR @project.or(:project_id.parent_id => @project)).sorted_by_rank
    #scope = Issue.open.visible.where(:project_id => @current_version) #(:project_id => @project || @project.parent_id == :project_id || @project ).sorted_by_rank
    if q.present?
      if q.match(/^#?(\d+)\z/)
        scope = scope.where("(#{Issue.table_name}.id = ?) OR (LOWER(#{Issue.table_name}.subject) LIKE LOWER(?))", $1.to_i, "%#{q}%")
      else
        scope = scope.where("LOWER(#{Issue.table_name}.subject) LIKE LOWER(?)", "%#{q}%")
      end
    end
    @issue_count = scope.count
    @issue_pages = Redmine::Pagination::Paginator.new @issue_count, 20, params['page']
    @version_issues = scope.offset(@issue_pages.offset).limit(@issue_pages.per_page).all
  end

那么,请问有人可以帮助我吗?我怎么能理解,@project 包含什么?如何将查询变成范围?

这是有效的 SQL 查询(或者至少它有我需要的行)。但我真的不知道如何让这个scope 变量包含这些数据?

SELECT * FROM `issues` WHERE `project_id` IN (SELECT `id` FROM `projects` WHERE `parent_id` IS NOT NULL OR `parent_id` IS NULL ) ORDER BY `id` ASC

【问题讨论】:

    标签: mysql ruby-on-rails ruby redmine


    【解决方案1】:

    其实我是这样修的

     def find_no_version_issues
        q = (params[:q] || params[:term]).to_s.strip
        #scope = (params[:scope] == "all" || @project.nil? ? Issue : @project.issues).open.visible.where(:fixed_version_id => nil).sorted_by_rank
        @subprojects = @project.descendants.visible.all
        @subprojects = @subprojects.to_a.push @project
        scope = Issue.open.visible.where(project_id:@subprojects).where(:fixed_version_id => nil).sorted_by_rank
        if q.present?
          if q.match(/^#?(\d+)\z/)
            scope = scope.where("(#{Issue.table_name}.id = ?) OR (LOWER(#{Issue.table_name}.subject) LIKE LOWER(?))", $1.to_i, "%#{q}%")
          else
            scope = scope.where("LOWER(#{Issue.table_name}.subject) LIKE LOWER(?)", "%#{q}%")
          end
        end
        @issue_count = scope.count
        @issue_pages = Redmine::Pagination::Paginator.new @issue_count, 20, params['page']
        @version_issues = scope.offset(@issue_pages.offset).limit(@issue_pages.per_page).all
      end
    

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多