<!-- SQL XML created by WWW SQL Designer, http://code.google.com/p/wwwsqldesigner/ -->
<!-- Active URL: http://ondras.zarovi.cz/sql/demo/ -->
<sql>
<datatypes db="mysql">
<group label="Numeric" color="rgb(238,238,170)">
<type label="Integer" length="0" sql="INTEGER" re="INT" quote=""/>
<type label="Decimal" length="1" sql="DECIMAL" re="DEC" quote=""/>
<type label="Single precision" length="0" sql="FLOAT" quote=""/>
<type label="Double precision" length="0" sql="DOUBLE" re="DOUBLE" quote=""/>
</group>
<group label="Character" color="rgb(255,200,200)">
<type label="Char" length="1" sql="CHAR" quote="'"/>
<type label="Varchar" length="1" sql="VARCHAR" quote="'"/>
<type label="Text" length="0" sql="MEDIUMTEXT" re="TEXT" quote="'"/>
<type label="Binary" length="1" sql="BINARY" quote="'"/>
<type label="Varbinary" length="1" sql="VARBINARY" quote="'"/>
<type label="BLOB" length="0" sql="BLOB" re="BLOB" quote="'"/>
</group>
<group label="Date & Time" color="rgb(200,255,200)">
<type label="Date" length="0" sql="DATE" quote="'"/>
<type label="Time" length="0" sql="TIME" quote="'"/>
<type label="Datetime" length="0" sql="DATETIME" quote="'"/>
<type label="Year" length="0" sql="YEAR" quote=""/>
<type label="Timestamp" length="0" sql="TIMESTAMP" quote="'"/>
</group>
<group label="Miscellaneous" color="rgb(200,200,255)">
<type label="ENUM" length="1" sql="ENUM" quote=""/>
<type label="SET" length="1" sql="SET" quote=""/>
<type label="Bit" length="0" sql="bit" quote=""/>
</group>
</datatypes><table x="432" y="122" name="trips">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="user_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="users" row="id" />
</row>
<row name="city_out_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="cities" row="id" />
<comment>����� ������ �����</comment>
</row>
<row name="city_in_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="cities" row="id" />
<comment>����� �����</comment>
</row>
<row name="date_start" null="1" autoincrement="0">
<datatype>DATE</datatype>
<default>NULL</default><comment>���� ������</comment>
</row>
<row name="date_return" null="1" autoincrement="0">
<datatype>DATE</datatype>
<default>NULL</default><comment>���� ��������</comment>
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
<comment>�������, �������� �������</comment>
</table>
<table x="587" y="69" name="add_trips">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="trip_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="trips" row="id" />
</row>
<row name="add_field_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="add_fields" row="id" />
</row>
<row name="value_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="add_fields_values" row="id" />
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="583" y="214" name="users">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="login" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="email" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<row name="passwd" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="267" y="184" name="cities">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="Name" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="764" y="79" name="add_fields">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="name" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="934" y="138" name="add_fields_values">
<row name="add_field_id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="add_fields" row="id" />
</row>
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="value" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
</sql>
Под веб не писал со студенчества, а тут увидел несколько видео уроков по рельсам и практически влюбился, решил для ознакомления сделать не большой проектик.
Структуру БД в виде картинки и хмл для http://ondras.zarovi.cz/sql/demo/ прикрепил.
trips - основная таблица, обязательные поля
add_fields - дополнительные поля
add_fields_values - возможные значения дополнительных полей
add_trips - соединительная таблица?, это я туториалов начитался, до этого я её считал отдельной, обязательной сущностью
На сколько правильна структура? Я все ещё в таблицах проектирую, а не в моделях.
Как правильно настроить связи в соответствии с вышиописанной логикой, на текущий момент я родил:
#add_fields_value.rb
> class AddFieldsValue < ActiveRecord::Base
> belongs_to :add_field
> end
#add_field.rb
> class AddField < ActiveRecord::Base
> has_many :add_fields_values, :dependent => :destroy
> has_many :trips, :through => :add_trips
> end
#add_trip.rb
> class AddTrip < ActiveRecord::Base
> belongs_to :trip
> belongs_to :add_field
> belongs_to :add_fields_value
>
> end
#trip.rb
> class Trip < ActiveRecord::Base
> belongs_to :user
>
> has_many :add_trips, :dependent => :destroy
> has_many :add_fields, :through => :add_trips
> has_many :add_fields_values, :through => :add_trips
>
> has_one : city, :foreign_key => "city_out_id"
> has_one : city, :foreign_key => "city_in_id"
>
> end
#user.rb
> class User < ActiveRecord::Base
> has_many :trips, :dependent => :destroy
> end
#city.rb
> class City < ActiveRecord::Base
> end
в такой конфигурации:
> Loading development environment (Rails 3.0.7)
> irb(main):001:0> field = Add_field.new(name:'target')
> LoadError: Expected C:/Sites/together/app/models/add_field.rb to define Add_field
> from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activesupport-3.
> 0.7/lib/active_support/dependencies.rb:492:in `load_missing_constant'
> from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activesupport-3.
> 0.7/lib/active_support/dependencies.rb:183:in `const_missing'
> from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activesupport-3.
> 0.7/lib/active_support/dependencies.rb:181:in `each'
> from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activesupport-3.
> 0.7/lib/active_support/dependencies.rb:181:in `const_missing'
> from (irb):1
хотя не факт что ошибка из-за связей
зы то что крутить рельсы под виндой - извращение - знаю, найду куда никсы воткнуть - сразу перелезу
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

Комментариев нет:
Отправить комментарий