我有3个Rails 4.2表:书籍、标签、分类,其中对其他两个表的分类是很多到多个联接表。
在show.html.erb文件中,我可以说
<%= @categorization.book.title %>而且书名会显示出来,但是在index.html.erb里面,如果我说类似的话
<%= categorizations.each do |categorization| %>
<%= categorization.book_id %> # this is ok
<%= categorization.book.title %> # not ok
...
<% end %>错误信息是
undefined method `title' for nil:NilClas我确信有一种方法可以让rails做到这一点,但我做得不对。是否有一种方法可以要求控制器使用所有三个表而不是仅使用联接表来进行连接?或者我是否需要在循环中实例化一个book对象(听起来很难看,但是.)?
发布于 2016-01-02 01:31:09
听起来你好像错过了模型中的ActiveRecord关联。为了在您的book模型上有一个categorization访问器,您需要在模型中定义关联。从上面的内容来看,您可能想要创建一个has_many :through关联。
有关更多细节,请参见活动记录关联文档。我想它会是这样的:
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。
https://stackoverflow.com/questions/34561662
复制相似问题