forked from fixin.me/fixin.me
Compare commits
1 Commits
fix/quanti
...
fix-text-c
| Author | SHA1 | Date | |
|---|---|---|---|
| b31ddd39e4 |
@@ -16,7 +16,7 @@ class Quantity < ApplicationRecord
|
||||
end
|
||||
validates :name, presence: true, uniqueness: {scope: [:user_id, :parent_id]},
|
||||
length: {maximum: type_for_attribute(:name).limit}
|
||||
validates :description, length: {maximum: type_for_attribute(:description).limit}
|
||||
validates :description, length: {maximum: type_for_attribute(:description).limit} if type_for_attribute(:description).limit
|
||||
|
||||
# Update :depths of progenies after parent change
|
||||
before_save if: :parent_changed? do
|
||||
@@ -63,16 +63,10 @@ class Quantity < ApplicationRecord
|
||||
scope :ordered, ->(root: nil, include_root: true) {
|
||||
numbered = Arel::Table.new('numbered')
|
||||
|
||||
path_expr = if connection.adapter_name =~ /mysql/i
|
||||
numbered.cast(numbered[:child_number], 'BINARY')
|
||||
else
|
||||
numbered[:child_number]
|
||||
end
|
||||
|
||||
self.model.with(numbered: numbered(:parent_id, :name)).with_recursive(arel_table.name => [
|
||||
numbered.project(
|
||||
numbered[Arel.star],
|
||||
path_expr.as('path')
|
||||
numbered.cast(numbered[:child_number], 'BINARY').as('path')
|
||||
).where(numbered[root && include_root ? :id : :parent_id].eq(root)),
|
||||
numbered.project(
|
||||
numbered[Arel.star],
|
||||
@@ -86,25 +80,20 @@ class Quantity < ApplicationRecord
|
||||
# be merged with :ordered
|
||||
# https://gist.github.com/ProGM/c6df08da14708dcc28b5ca325df37ceb#extending-arel
|
||||
scope :numbered, ->(parent_column, order_column) {
|
||||
row_num = Arel::Nodes::NamedFunction.new('ROW_NUMBER', [])
|
||||
.over(Arel::Nodes::Window.new.partition(parent_column).order(order_column))
|
||||
|
||||
child_number = if connection.adapter_name =~ /mysql/i
|
||||
select(
|
||||
arel_table[Arel.star],
|
||||
Arel::Nodes::NamedFunction.new(
|
||||
'LPAD',
|
||||
[
|
||||
row_num,
|
||||
Arel::Nodes::NamedFunction.new('ROW_NUMBER', [])
|
||||
.over(Arel::Nodes::Window.new.partition(parent_column).order(order_column)),
|
||||
Arel::SelectManager.new.project(
|
||||
Arel::Nodes::NamedFunction.new('LENGTH', [Arel.star.count])
|
||||
).from(arel_table),
|
||||
Arel::Nodes.build_quoted('0')
|
||||
]
|
||||
],
|
||||
).as('child_number')
|
||||
)
|
||||
else
|
||||
Arel::Nodes::NamedFunction.new('format', [Arel::Nodes.build_quoted('%09d'), row_num])
|
||||
end
|
||||
|
||||
select(arel_table[Arel.star], child_number.as('child_number'))
|
||||
}
|
||||
|
||||
def to_s
|
||||
|
||||
@@ -13,7 +13,7 @@ class Unit < ApplicationRecord
|
||||
end
|
||||
validates :symbol, presence: true, uniqueness: {scope: :user_id},
|
||||
length: {maximum: type_for_attribute(:symbol).limit}
|
||||
validates :description, length: {maximum: type_for_attribute(:description).limit}
|
||||
validates :description, length: {maximum: type_for_attribute(:description).limit} if type_for_attribute(:description).limit
|
||||
validates :multiplier, numericality: {equal_to: 1}, unless: :base
|
||||
validates :multiplier, numericality: {greater_than: 0, precision: true, scale: true}, if: :base
|
||||
|
||||
|
||||
Reference in New Issue
Block a user