2016-08-25 2 views
0

Итак, у меня есть форма с вложенными данными, которые правильно отображаются в форме и правильно сохраняются. Тем не менее, я сейчас работаю над попыткой отобразить эти данные, и я действительно сражаюсь.Борьба за отображение вложенных данных в Rails

Так что у меня много данных, но основное внимание будет уделено двум конкретным типам данных:

У меня есть пользователи, и пользователи могут создавать проекты. Два поля данных я сражающиеся с связанные с проектами являются:

  • Каждый проект имеет бюджет (хранится как budget_id на столе проекта, и для которого я хочу назвать имя бюджета)
  • Каждый проект кучу функций через features_projects присоединиться к таблице

Модель проекта

class Project < ApplicationRecord 
    belongs_to :user 
    has_one :budget 
    has_and_belongs_to_many :features 
end 

Бюджет Модель

class Budget < ApplicationRecord 
    belongs_to :project 
end 

Особенности модели

class Feature < ApplicationRecord 
    has_and_belongs_to_many :projects 
end 

Экстракт индексного метода с Проекты контроллера

def index 
    @projects = Project.all 
end 

Project View, чтобы показать индекс

<div class="container dashboard"> 
     <div class="center"> 
     <h1> Your Projects</h1> 
     </div> 
     <table class="table table-striped"> 
     <thead> 
      <tr> 
      <th>Description</th> 
      <th>Budget</th> 
      <th>User_id</th> 
      <th colspan="3"></th> 
      </tr> 
     </thead> 

     <tbody> 
      <% @projects.each do |project| %> 
      <tr> 
       <% if project.user == current_user %> 
       <td><%= project.description %></td> 
       <td><%= project.budget_id %></td> 
       <td><%= project.user.email if project.user %></td> 
       <td><%= link_to 'Show', project, class: "btn btn-info btn-sm" %></td> 
       <td><%= link_to 'Edit', edit_project_path(project), class: "btn btn-warning btn-sm" %></td> 
       <td><%= link_to 'Destroy', project, class: "btn btn-danger btn-sm", method: :delete, data: { confirm: 'Are you sure?' } %></td> 
       <% end %> 
      </tr> 
      <% end %> 
     </tbody> 
     </table> 

     <br> 
     <div class="center"> 
     <%= link_to 'New Project', new_project_path, class:"btn btn-lg btn-success" %> 
     </div> 
    </div> 

В основном я хочу иметь возможность отображать бюджет, сохраненный для каждого проекта, а также список функций, которые они выбрали. Я пробовал несколько разных решений из онлайн-решений, но мне не повезло :(Я думаю, возможно, мне нужно создать переменную @budget, возможно, под индексом, но мне тоже не повезло. Может кто-нибудь любезно помочь объяснить, как я хотел бы сделать это

спасибо

UPDATE Использование project.budget.name показывает следующее сообщение об ошибке:?!

ActiveRecord::StatementInvalid in Projects#index 

PG::UndefinedColumn: ERROR: column budgets.project_id does not exist 
LINE 1: SELECT "budgets".* FROM "budgets" WHERE "budgets"."project_... 

ответ

0

Когда ты скажем, по адресу:

Each project has a budget (stored as a budget_id on the project table, and for which I want to call the name of the budget)

Это не так, как has_one работает, он будет ожидать project_id на столе бюджета.

Думаю, вам нужно использовать belongs_to.

http://guides.rubyonrails.org/association_basics.html#the-has-one-association

+1

Потрясающие спасибо! Вот так! – Stephen

0
project.budget.name #give name of budget 
project.features do |feature| 
    feature.name # gives feature name 
end 
+0

Спасибо Я попробовать это, но получил ошибку - Я обновить вопрос, чтобы показать ошибку – Stephen

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