1

我对 Rails 很陌生,但今天开始遇到这个我以前没有遇到过的问题。目前正在开发具有一些嵌套关联的应用程序。虽然我可以通过父关联创建和添加保存这些嵌套关联,但我似乎无法很好地调用关联模型中的元素。我可以看到信息已保存,但是当我调用它时,我得到模型的名称而不是表的名称列中的名称。

brew.rb

    class Brew < ActiveRecord::Base
     has_many :fermentables
     has_many :extras
     has_many :hops
     has_many :yeasts

     accepts_nested_attributes_for :hops

     end

跳跃.rb

     class Hop < ActiveRecord::Base
        belongs_to :brew
      end

显示.html.erb

      <%= @brew.name %>
       <%= @brew.story %>
       <%=  @brew.walkthrough %>
       <%=  @brew.hops.name%>

除了@brew.hops.name 之外,该节目几乎所有内容都很好。它只显示 Hop。当我进入 rails 控制台时,我可以看到名称已保存。但只有当我做类似的事情时。

   t = Brew.last
   t.hops.name

只导致单词“hops”

但如果我只是说

   t.hops

我明白了

      ` SELECT "hops".* FROM "hops" WHERE "hops"."brew_id" = ?  [["brew_id", 28]]
        => #<ActiveRecord::Associations::CollectionProxy [#<Hop id: 6, name: "Warrior",
        brew_id: 28, created_at: "2013-06-09 22:09:19", updated_at: "2013-06-09    22:09:19">]> `
4

2 回答 2

1

Brew 和 hops 是一对多的关系,因此@brew.hops返回属于 的所有 hops 的集合@brew。所以,如果你想显示所有关联的hops名字,你应该这样做:

<% @brew.hops.each do |hop| %>
  <%= hop.name %><br />
<% end %>
于 2013-06-09T22:22:07.887 回答
0

t.hops返回一个表示has_many关联本身的对象,而不是单独的 Hop 记录,并且name在该关联对象上调用该方法会给出关联模型的类(Hop 类)的名称。

所以我认为您想要遍历关联的 Hops 列表并打印它们的每个名称:

<%- @brew.hops.each do |hop| -%>
  Hop: <%= hop.name %>
<%- end -%>
于 2013-06-09T22:23:54.813 回答