争吵以在Rails

时间:2016-08-25 19:16:56

标签: ruby-on-rails nested-attributes model-associations

所以我有一个带有嵌套数据的表单,它正确地显示在表单中并正确保存。但是,我现在正在努力尝试显示这些数据而且我真的在争吵。

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

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

  • 每个项目都有预算(在项目表中存储为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

项目视图以显示索引

    <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变量,但我也没有任何运气。有人可以帮忙解释一下我会怎么做吗?

非常感谢!

更新 使用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_...

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

当你说:

  

每个项目都有预算(在项目表中存储为budget_id,我想称之为预算名称)

这不是has_one的工作方式,预计会在预算表上显示project_id

我认为你需要使用belongs_to

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