Maxim Kulkin
Posts: 58
Nickname: hapk
Registered: Sep, 2006
Maxim Kulkin is developer in Selectosa Systems.
|
|
|
|
������������ / ���������������� ������������
|
Posted: Nov 3, 2006 10:12 AM
|
|
Advertisement
|
�������������� ���������������������� ���������� ��������������������:
�� �������� �� �������� �������� integer ���������������� ���������� �������������� (������-���� ���������� �� ������������ ����������). �������� ������������������������ ���������������������������� �������� ������������ �� ������������������ ������ ������������������������ �������� (��.��. �������� : ������������). ���������������� ���������������� �� ���������� ��������������.
�� HTML ���������������������������� �������������� ���������������� ������ 2 SELECT'�� (�������� �� ������������). ����������������: �������������� ������ �������� ������������������ �� �������� �������� (����������_��������������������_����������), ���������� ���������� ������������������ ������ �� ��������.
�� �������������� �������� ������������������ ������������������ ������������ ������������ �������� ���� �������������������� request-��������������������. ������ ������������������������, �������� �������� ���������� �������������� �������� "(x)", ������ x - �������������������� ���������� ������������������. �������� ������������ ������������������ ���������� ������������������, ������ ���� ���������������� �� ������������������ ���������� �� ���������������� ���� ������ ������������������ "��������������������" ������ ������������. ������ ���������� ������ �������������� �������������� ������ (����������) ���������������� ����������������, �� ���������������� �� �������� ���������� new �� ������������������������������ (������������������������������ ������-���� �������������������� �� ������������������������������) ���������������������� ��������������������.
������������ �������� ������������, ������ ������������������ ������������ ����������. ���������� ���������� ������ �������������� �������� ������������ �������������������������������� �������������� (���������������� ���� ���� ������) �� �������� ������������, ������ ������������ ������������ ��������������������. ������ �������������������� ������������ ������ ��������������������. �� �������������� �������������������� ������������������ ���������������������������� ���������������������� ������������ ������������ composed_of.
�������� ������������ ������������ ������ ������ ������������ ������ ��������������. ������ ���������������������� ���������������������� �� ���������� �������������������� - ���������� ���������� �� ������������ ���������� (������������, �������������� ���������� ������������������ �� ��������). ����������, ���������� ���� �������������� ������������ ������ ���������� �� ����������, �� ���������� to_s:
class CalendarTime attr_reader :minutes_since_midnight
def initialize(minutes) @minutes_since_midnight = minutes end
def hour @minutes_since_midnight / 60 resuce nil end
def min @minutes_since_midnight % 60 resuce nil end
def to_s "%d:%02d" % [ hour, min ] end end
������������ �������������� ������������������ �� ������������:
class CalendarEvent < ActiveRecord::Base composed_of :time, :class_name => 'CalendarTime', :mapping => [:time, :minutes_since_midnight ], # �������������������� AR �������������� time ���� �������� minutes_since_midnight ������������ ������������ :allow_nil => true # ������������������ nil �� ���������������� ���������������� ���������������� end
��������������. ������������ ������ ������������������ �� event.time ���� �������������� ������������������ CalendarTime. ������������ ��������������������������. �������� �������������� ������������ �������������� ���������� ���������������� ������ �������������� �� �������������� ��������������.
module ApplicationHelper def time_select(object_name, method, options = {}) # �������������� ������ ������������ object = options[:object] || instance_variable_get('@'+object_name) # �� ���������������� value = object.send(method)
# �������������������� ���������� options.delete :object object[:discard_type] = true
# �������������������� ������������ ������ ���������� ������������������ name = "#{object_name}[#{attr}(%di)]"
# ������ ������������ CalendarTime ������������������������ ���������������� hour �� minute # �������������� ���������� ���������� ������������������������������ ������������������������ ������������������ select_hour(value, options.merge :prefix => name%1) + ' : ' + select_minute(value, options.merge :prefix => name%2) end end
������������ �� �������������������������� �������������� ���������� ���������� ��������������:
<p> <label for="event_time">Time</label><br/> <%= time_select 'event', 'time', :include_blank => true %> </p>
��������������, ���������������� ������������ �������������� ������������ ����������. ������ �� ������ ��������������, ������ ������������������ �������������������������������� ActiveRecord �������������������������� ������������������������ ������������ (�� ���������� ������������ - CalendarTime) �� ������������������������������ ���������������������� ��������������������. ������������ �������� �������������������� ������ ������������������ �� ������������������������ CalendarTime. ������ ���������� ������������������ ������ ������:
class CalendarTime def initialize(*args) if args.size == 1 && args[0].is_a?(Numeric) @minutes_since_midnight = args[0] elsif args.size == 2 && args[0].is_a?(Numeric) && args[1].is_a?(Numeric) @minutes_since_midnight = args[0]*60 + args[1] end end end
��������������������, ������.
���������� ������ ������������ ���������������� ������������������ ������������ ��������������, �������� �������������� ������������, ������ (�� ����������) ���������������� ���������������������� ������������ �� composed_of. ������ ������, �������������� ������������������ ���� �������������� �������������������� �� ������ �� ���������������� ������������������ ������������������������ �������������������� ���������������� �������� �������������������� ������������������ (�������������������������� �� :mapping ����������). ���������������� �������������������� �������������������� ������ �������������������� ������������ ������������ ���������������� ����������������.
PS �������� �������� gotcha: ������ ������������ ���������������� ���� ������������������������������, ������������ ���� ����������-���� ���������������� ������������������������������ ������ ������������ ������������ ������ nil. ������������ ������������������ �� ��������. ������ �� ������������������������ ���������� ������������������ �������������������� ������������, ������ ������������ ��������.
Read: ������������ / ���������������� ������������
|
|