如何从rails index.html.erb视图引用连接表列

时间:2016-01-02 01:19:43

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

我有3个Rails 4.2表:书籍,标签,分类,其中分类是其他两个的多对多连接表。

在show.html.erb文件中,我可以说

<%= categorizations.each do |categorization| %>
<%= categorization.book_id %> # this is ok
<%= categorization.book.title %> # not ok
 ...
<% end %>

将显示书名,但在index.html.erb中,如果我说类似

的内容
undefined method `title' for nil:NilClas

错误消息是

#include <stdio.h>
#include <initguid.h>
#include <mmdeviceapi.h>
#include <endpointvolume.h>
#include <math.h>
int main() {
  IAudioEndpointVolume *wh;
  IMMDevice *ya;
  IMMDeviceEnumerator *xr;
  CoInitialize(0);
  CoCreateInstance(&CLSID_MMDeviceEnumerator, 0, CLSCTX_INPROC_SERVER,
    &IID_IMMDeviceEnumerator, (void**)&xr);
  xr->lpVtbl->GetDefaultAudioEndpoint(xr, eRender, eConsole, &ya);
  ya->lpVtbl->Activate(ya, &IID_IAudioEndpointVolume, CLSCTX_ALL,
    0, (void**)&wh);
  float zu;
  wh->lpVtbl->GetMasterVolumeLevelScalar(wh, &zu);
  printf("%d\n", (int) round(100 * zu));
}

我确信有办法让轨道来做这件事,但我做得不对。有没有办法让控制器使用所有三个表而不仅仅是连接表进行连接?或者我是否需要在循环中实例化一个书籍对象(听起来很难看,但是......)?

1 个答案:

答案 0 :(得分:1)

听起来您错过了模型中的ActiveRecord关联。为了在book模型上拥有categorization访问者,您需要在模型中定义关联。根据您的上述说法,您可能希望创建has_many :through关联。

有关详细信息,请参阅Active Record Associations documentation。我想它看起来像这样:

class Book < ActiveRecord::Base
  has_many :categorizations
  has_many :tags, through: :categorizations
end

class Categorization < ActiveRecord::Base
  belongs_to :book
  belongs_to :tag
end

class Tag < ActiveRecord::Base
  has_many :categorizations
  has_many :books, through: :categorizations
end

一旦你建立了协会,你应该可以毫无问题地@categorization.book