Rails - 从上表中检索数据

时间:2014-09-12 07:51:15

标签: ruby-on-rails ruby ruby-on-rails-4

我有两种模式:品牌和广告活动,品牌有很多广告系列。当我与任何品牌合作时,我想获得我现有的品牌。

暂停代码只是写“品牌”而不是所有品牌名称。

我的广告系列模型包括:

 class Campaign < ActiveRecord::Base
  belongs_to :brand

我的Bradn模特:

 class Brand < ActiveRecord::Base
  has_many :campaigns

这是我的campaigns_conroller:

def index
        @campaign=Campaign.all
        @brand=Brand.all
    end

这是我的索引视图

<% @campaign.each do |campaign| %>
    <tr>
        <td><%= @brand.name %></td>
        <td><%= campaign.title %></td>

'campaign.title'正常运作。我只检索了“品牌”文字,而不是品牌名称。

有人可以说我应该做什么吗?

3 个答案:

答案 0 :(得分:1)

首先对index进行一些更改:

def index
  @campaigns = Campaign.includes(:brand).all # (1) Plural naming to reflect its a collection of objects, (2) One call to the DB to fetch both campaigns and associated brands, read about include
end

然后,(您已经想过如何访问关联的对象),区别在于:includes,这不会触发其他DB调用:

<% @campaigns.each do |campaign| %>
  <tr>
    <td><%= campaign.brand.name %></td>
    <td><%= campaign.title %></td>

答案 1 :(得分:0)

@brand是一个包含所有品牌的数组,我不确定您尝试展示的元素。

我猜你想要每个广告系列的品牌。

<td><%= campaign.brand.name %></td>

答案 2 :(得分:0)

您必须获取广告系列的品牌。您可以通过关联名称访问belongs_to模型:

<% @campaign.each do |campaign| %>
  <tr>
    <td><%= campaign.brand.name %></td>
    <td><%= campaign.title %></td>