【问题标题】:Rails 4 calling nested associationsRails 4调用嵌套关联
【发布时间】:2013-06-09 22:14:47
【问题描述】:

我对 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

hop.rb

     class Hop < ActiveRecord::Base
        belongs_to :brew
      end

show.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">]> `

【问题讨论】:

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


    【解决方案1】:

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

    <% @brew.hops.each do |hop| %>
      <%= hop.name %><br />
    <% end %>
    

    【讨论】:

    • 哇哦。非常感谢,我不敢相信我没听懂。非常感谢。
    【解决方案2】:

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

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

    <%- @brew.hops.each do |hop| -%>
      Hop: <%= hop.name %>
    <%- end -%>
    

    【讨论】:

    • 哇哦。非常感谢,我不敢相信我没听懂。非常感谢。
    • 如果您满意,请将其中一个答案标记为“已接受”以关闭问题,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多