2016-04-03 53 views
0

noob問題警告:如何通過關聯迴路中軌

方案

我在我的Rails應用程序,即兩種型號。名字和暱稱。

的關聯是:

name has_many :nicknames 

nickname belongs_to :name 

在哪裏,遷移是

class CreateNames < ActiveRecord::Migration 
    def change 
    create_table :names do |t| 
     t.string :name 
     t.timestamps null: false 
    end 
    end 
end 

class CreateNicknames < ActiveRecord::Migration 
    def change 
    create_table :nicknames do |t| 
     t.integer :name_id 
     t.string :nickname 
     t.timestamps null: false 
    end 
    end 
end 

我有一個家控制器

class HomeController < ApplicationController 
def index 
    @names = Name.all 
    end 
end 

我家的索引頁看起來像

<% @names.each do |name| %> 
    <h3><%= name.name %></h3> 
<% end %> 

工作正常。

問題

我想顯示在一個名稱下的所有暱稱

喜歡的東西

<% @names.each do |name| %> 
    <h3><%= name.name %></h3> 
    <% @name.each do |nickname| %> 
     <p><%= nickname.nickname %></p> 
    <% end %> 
<% end %> 

我怎樣才能做到這一點???請幫助

編輯:協會從鐵軌控制檯的工作只是罰款

提取物:

irb(main):025:0> Name.first.nicknames.first 
    Name Load (0.8ms) SELECT "names".* FROM "names" ORDER BY "names"."id" ASC LIMIT 1 
    Nickname Load (0.4ms) SELECT "nicknames".* FROM "nicknames" WHERE "nicknames"."name_id" = $1 ORDER BY "nicknames"."id" ASC LIMIT 1 [["name_id", 1]] 
=> #<Nickname id: 1, name_id: 1, nickname: "somenickname", created_at: "2016-04-03 14:36:15", updated_at: "2016-04-03 14:36:15"> 

回答

1
<% @names.each do |name| %> 
    <h3><%= name.name %></h3> 
    <% name.nicknames.each do |nickname| %> 
     <p><%= nickname.nickname %> 
    <% end %> 
<% end %> 
+0

給出錯誤 「未定義的方法'暱稱的零:NilClass」 – Abhi9

+0

改變家庭控制器指數'@ names'取代'@name ' – miler350

+0

對不起,早期修復 – Abhi9

0

你命名的數組

name.nicknames 

使用的has_many關聯(名字has_many暱稱)。所以它應該是

@name.nickanames.each { |nick| puts nick } 

當然,你可以將它擴展到一個塊。

0

此控制器將幫助您在查詢變大時加載更快的查詢。

控制器:

class HomeController < ApplicationController 
    def index 
    @names = Name.includes(:nicknames).all 
    end 
end 

Html頁面:

<% @names.each do |name| %> 
    <h3><%= name.name %></h3> 
    <% name.nicknames.each do |nickname| %> 
     <p><%= nickname.nickname %> 
    <% end %> 
<% end %>