努力在 Rails 中显示嵌套数据
Battling to display nested data in Rails
所以我有一个包含嵌套数据的表单,它在表单中正确显示并被正确保存。但是,我现在正在尝试显示这些数据,但我真的很挣扎。
所以我有很多数据,但将重点关注两种特定类型的数据:
我有用户,用户可以创建项目。我正在处理的与项目相关的两个数据字段是:
- 每个项目都有一个预算(在项目 table 上存储为 budget_id,我想为其调用预算的名称)
- 每个项目通过 features_projects 加入一堆功能 table
项目模型
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
所以我有一个包含嵌套数据的表单,它在表单中正确显示并被正确保存。但是,我现在正在尝试显示这些数据,但我真的很挣扎。
所以我有很多数据,但将重点关注两种特定类型的数据:
我有用户,用户可以创建项目。我正在处理的与项目相关的两个数据字段是:
- 每个项目都有一个预算(在项目 table 上存储为 budget_id,我想为其调用预算的名称)
- 每个项目通过 features_projects 加入一堆功能 table
项目模型
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