{"record":{"id":"5adfbdc416f1ee79","repo":"forem/forem","slug":"limit-must-be-between-1-and-50","errorCode":null,"errorMessage":"Limit must be between 1 and 50","messagePattern":"Limit must be between 1 and 50","errorType":"exception","errorClass":"StandardError","httpStatus":null,"severity":"error","filePath":"app/liquid_tags/org_team_tag.rb","lineNumber":52,"sourceCode":"  def parse_options(option_tokens)\n    @limit = DEFAULT_LIMIT\n    @role = \"all\"\n\n    option_tokens.each do |token|\n      match = token.match(OPTION_REGEXP)\n      raise StandardError, I18n.t(\"liquid_tags.org_team_tag.invalid_option\", option: token) unless match\n\n      key, value = match[1], match[2]\n      raise StandardError, I18n.t(\"liquid_tags.org_team_tag.invalid_option\", option: key) unless VALID_OPTIONS.include?(key)\n\n      send(:\"parse_#{key}\", value)\n    end\n  end\n\n  def parse_limit(value)\n    @limit = Integer(value, exception: false)\n    unless @limit && @limit >= 1 && @limit <= MAX_LIMIT\n      raise StandardError, I18n.t(\"liquid_tags.org_team_tag.invalid_limit\")\n    end\n  end\n\n  def parse_role(value)\n    unless VALID_ROLES.include?(value)\n      raise StandardError, I18n.t(\"liquid_tags.org_team_tag.invalid_role\")\n    end\n\n    @role = value\n  end\n\n  def build_query\n    case @role\n    when \"admins\"\n      @organization.users.joins(:organization_memberships)\n        .where(organization_memberships: { organization_id: @organization.id, type_of_user: \"admin\" })\n    when \"members\"\n      @organization.users.joins(:organization_memberships)","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/forem/forem/blob/f354c376a7c5d1330dc40d66f150be8d1289020d/app/liquid_tags/org_team_tag.rb#L34-L70","documentation":"The limit option for {% org_team %} must parse as an integer and fall in 1..MAX_LIMIT (50). parse_limit uses Integer(value, exception: false), so non-numeric values yield nil; nil, 0, negative numbers, and values above 50 all raise the same range message. The default when omitted is 50.","triggerScenarios":"limit=0, limit=51, limit=100, or a non-numeric value such as limit=abc.","commonSituations":"Large orgs wanting to show everyone; typos; expecting silent clamping instead of an error.","solutions":["Set limit to an integer between 1 and 50","Note that omitting limit already shows up to 50 members, the maximum","For larger rosters, link to the org's members page instead of raising the limit"],"exampleFix":"// before\n{% org_team forem limit=200 %}\n\n// after\n{% org_team forem limit=50 %}","handlingStrategy":"validation","validationCode":"limit = Integer(value, exception: false)\nraise ArgumentError, 'limit must be 1..50' unless limit&.between?(1, 50)","typeGuard":"def valid_org_team_limit?(value)\n  limit = Integer(value.to_s, exception: false)\n  limit.is_a?(Integer) && limit.between?(1, 50)\nend","tryCatchPattern":"begin\n  Liquid::Template.parse(body_markdown)\nrescue StandardError => e\n  errors.add(:body_markdown, \"Liquid tag error: #{e.message}\") # 'Limit must be between 1 and 50'\nend","preventionTips":["Omitting limit already renders the maximum (50)","Clamp author-supplied values in the CMS layer before writing the tag"],"tags":["liquid","forem","org-team","out-of-range","validation"],"backgroundTag":"parameter-out-of-range","analyzedSha":"f354c376a7c5d1330dc40d66f150be8d1289020d","analyzedAt":"2026-08-21T12:43:44.428Z","schemaVersion":2},"datasetVersion":"2026-08-21T13:17:26.733Z"}