2015-05-25 7 views
0

Я новичок в RoR.Как мне перемещаться по объекту и его вложенным объектам, прежде чем переходить к следующему объекту в Rails?

То, что я пытаюсь выполнить это цикл по списку service_types(тормоза, барабаны, колодки и т.д. ...) в service категории (тормоза), принадлежащие к каждой технологии, прежде чем переходить к следующий service категория (подвеска).

У меня есть установки с помощью:

Gems
devise: user signup
cocoon: customizable nested objects

Мой взгляд от моих услуг/show.html.erb

<tbody> 
    <% @services.each do |service| %> 
     <tr> 
     <td><%= service.name %></td> 
     <td><%= **??? Don't know how to cycle through to capture the tech's list `services` and `service types**` %> 
     </tr> 
    <% end %> 
    </tbody> 

сервис .rb модель

class Service < ActiveRecord::Base 
    has_many :service_types 
    belongs_to :tech 

    accepts_nested_attributes_for :service_types, :reject_if => :all_blank, :allow_destroy => true 
end 

techs_controller.rb

class TechsController < ApplicationController 

    def index 
    @techs = Tech.all 
    @services = Service.all 

    end 

    def show 
    @tech = Tech.find(params[:id]) 
    @services = @tech.services.all 
    #@service_types = @service.service_types.all 
    end 
end 

технологий.гь модели (БД со списком санитаров - зарегистрированная через devise драгоценного камня)

class Tech < ActiveRecord::Base 

    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    has_many :service_types 
    has_many :services 
    has_many :appointments 
    has_many :customers, :through => :appointments 
end 

Отредактировано - 5/25 [Причина: ошибка копирование паста/опечатка]

Услуга (содержит данные со списком основных категорий услуг)

mysql> describe services; 
+------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| name  | varchar(255) | YES |  | NULL |    | 
| created_at | datetime  | NO |  | NULL |    | 
| updated_at | datetime  | NO |  | NULL |    | 
| tech_id | int(11)  | YES |  | NULL |    | 
+------------+--------------+------+-----+---------+----------------+ 

В tech_id ссылки запись в tech дб

ServiceType (из кокона драгоценного камня, который позволяет мне создавать вложенные типы услуг с несколькими пользовательскими атрибутами)

mysql> describe service_types; 
+-------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| name  | varchar(255) | YES |  | NULL |    | 
| description | varchar(255) | YES |  | NULL |    | 
| time  | varchar(255) | YES |  | NULL |    | 
| price  | decimal(8,2) | YES |  | NULL |    | 
| decimal  | decimal(8,2) | YES |  | NULL |    | 
| service_id | int(11)  | YES | MUL | NULL |    | 
| created_at | datetime  | NO |  | NULL |    | 
| updated_at | datetime  | NO |  | NULL |    | 
+-------------+--------------+------+-----+---------+----------------+ 

В service_id ссылки на запись в services дб

После нескольких дней исследований ближайший я пришел, чтобы выполнить то, что я хотел, это fr ом мой взгляд:

<tbody> 
    <% @services.each do |service| %> 
     <tr> 
     <td><%= service.name %></td> 
     <td><%= service.service_types.all.collect{|s| [s.name, s.time, s.price} %></td> 
     </tr> 
    <% end %> 
    </tbody> 
</table> 

выше производит это:

Brakes [["Rotors", 1HR], ["Drums", 1HR]]

Что я ищу для этого вывода является следующее:

Ниже выходной я ищу для:

+---------+----------+-----+-------+ 
| Brakes | Type | Time | Price | 
+---------+--------+-------+-------+ 
      | Rotors | 1HR | 100 | 
      | Drums | 1HR | 100 | 

+-------------+----------+-----+-------+ 
| Suspension | Type | Time | Price | 
+-------------+--------+-------+-------+ 
       | Struts | 2HR | 100 | 
       | Shocks | 1HR | 100 | 

Я хотел бы пройти через service(тормоза) и все вложенные service_types перед тем, как перейти на велосипедную прогулку по следующему service Категория (подвеска).

Любая помощь будет оценена по достоинству. Благодаря

+0

- что такое 'сервис'? можете ли вы опубликовать его определение? – daslicious

+0

Приносим извинения, я добавил сервисную модель. –

ответ

2
<% @services.each do |service| %> 
     <tr> 
     <td><%= service.name %></td> 
     <td> 
      <table> 
      <tr> 
       <th>Name</th> 
       <th>Time</th> 
       <th>Price</th> 
      </tr> 
      <% service.service_types.each do |service_type| %> 
       <tr> 
       <td><%= service_type.name %></td> 
       <td><%= service_type.time %></td> 
       <td><%= service_type.price %></td> 
       </tr> 
      <%end%> 
      </table> 
     </td> 
     </tr> 
    <% end %> 

И еще одна вещь

service_type_id

не требуется в таблице службы.

+0

Большое спасибо @ pardeep-dghra! Я мог бы поклясться, что я сделал что-то похожее на это, но получал ошибки. Я исправил свой пост в комментарии 'service_type_id'. –

+0

@captainawesome это сделано, и это решение сработало? –

+0

@captainawesome отметьте это правильно, если это решение вам помогло :) –

Смежные вопросы