努力在 Rails 中显示嵌套数据

Battling to display nested data in Rails

所以我有一个包含嵌套数据的表单,它在表单中正确显示并被正确保存。但是,我现在正在尝试显示这些数据,但我真的很挣扎。

所以我有很多数据,但将重点关注两种特定类型的数据:

我有用户,用户可以创建项目。我正在处理的与项目相关的两个数据字段是:

项目模型

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

Projects Controller

中提取索引方法
def index
  @projects = Project.all
end

项目视图显示索引

    <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>

我基本上希望能够显示为每个项目节省的预算以及他们选择的功能列表。我一直在尝试在线解决方案中的一些不同的东西,但没有任何运气 :( 我想也许我需要在 index 方法下创建一个 @budget 变量,但我也没有任何运气。谁能帮我解释一下我会怎么做?

非常感谢!

更新 使用 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_...
project.budget.name #give name of budget 
project.features do |feature|
  feature.name # gives feature name
end

当你这样说时:

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 预算 table。

我认为你需要使用 belongs_to

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