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