2013-08-22 24 views
0

你好,我創建了2個表(類別和員工),都是有關係,我想在我的員工索引視圖,而不是ID的節目名稱,而不是IDS軌道

****Here is my Categories Table****** 

    class CreateCategories < ActiveRecord::Migration 
    def self.up 
     create_table :categories do |t| 
     t.string :category_name 
     end 
    end 

    def self.down 
     drop_table :categories 
    end 
    end 

****Here is my Enployees Table****** 

    class CreateEmployees < ActiveRecord::Migration 
    def self.up 
     create_table :employees do |t| 
     t.string :name 
     t.string :last_name 
     t.integer :categories_id 
     end 
    execute "ALTER TABLE employees ADD CONSTRAINT fk_employees_categories FOREIGN KEY (categories_id) REFERENCES categories (id)" 
    end 

    def self.down 
     drop_table :employees 
    end 
    end 


****Here is my Employee controller****** 

class EmployeeController < ApplicationController 
    def index 
    @employees = Employee.all 
    end 
end 

****Here is my Category controller****** 

class CategoryController < ApplicationController 
    def index 
    @categories = Category.all 
    end 
end 

****Here is my Category Model****** 

class Category < ActiveRecord::Base 
    has_many :employees 
end 

****Here is my Employee Model****** 

class Employee < ActiveRecord::Base 
    belongs_to :category 
end 


****Here is Employee view******* 

<table> 
<tr> 
    <th>Employee</th> 
    <th>Last Name</th> 
    <th>Category</th> 
</tr> 
    <% @employees.each do |e| %> 
<tr> 
    <td><%=h e.name %></td> 
    <td><%=h e.last_name %></td> 
    <td><%=h e.categories_id %> 
</td> 

顯示CATEGORY_NAME(分類表)這裏在e.categories_id我想顯示categories_name是從我的分類表

<td> 
    <%= link_to ("View" ,:controller=>"employee",:action=>"show", :id=>e.id) %> 
</td> 
<td> 
    <%= link_to ("Edit", :controller=>"employee",:action=>"edit",:id=>e.id ) %> 
</td> 
<td> 
    <%= link_to ("Delete",:controller=>"employee",:action=>"destroy", :id=>e.id ,:confirm=>"sure?" %> 
</td> 
</tr> 
    <% end %> 
</table> 

有人可以幫我解決這個問題嗎?

+0

替換此'​​<%= H e.categories_id%>' 與 '​​<%= H e.category.category_name%>' –

回答

0
<%= h e.category.category_name %> 

將做的伎倆。

請注意,如果您只是這樣做,將會爲您顯示的每一行(稱爲N + 1問題)執行SQL查詢。

在您的控制器

所以,你必須改變

@employees = Employee.all 

@employees = Employee.find(:all, :include => [:category]) 

這將迫使預先加載,減少查詢的次數爲2

(作爲一個方面說明,你現在應該已經開始使用Rails 3了,Rails 4是最新的,每個版本都提供了比上次更多的功能。)

+0

我想你的代碼,但我得到此消息。 未定義的方法'包括爲#<類別:0x7f2d99c59a68> 即時使用Rails 2.3.5和紅寶石工作1.8.7 –

0

在你的員工指數的看法,

<td><%=employee.categories.category_name %> 

instead of 

<td><%=h e.categories_id %> 
+0

抱歉的人,但不工作: ​​<%= employee.categories。 category_name%> –

0

在你的員工控制器添加此 這意味着,獲得CATEGORY_NAME出現在你的索引視圖,而不是ID。

@category= Category.all() 
@category_list=[] 
@category.each do |c| 
@category_list << [c.category_name,c.id] 
end 

,然後在你的索引視圖

<td><%=employee.categories.category_name %> 
0

我知道這是一個遲到的回答,但對於任何人誰是尋找一個答案,這裏是我如何完成這一點,

我有一個桌子不動產,與特徵表有一對多關聯。我將railscast方法用於多個複選框選擇,因此對於每個不動產都具有某些功能。我想在索引視圖中顯示其行中每個不動產的特徵。我曾在放映視圖,特徵是這個樣子,

@realty.feature_ids 

其中@realty控制器是

@realty = Realty.find(params[:id]) 
然而

,該指數僅查看realty.feature_ids顯示的數字僅不名。

在這裏工作了這一點,就是我在索引視圖做:

<% @realties.each do |realty| %> 
    <td> 
    <% realty.feature_ids.each do |feature| %> 
     <%= Feature.find(feature).name %> 
    <% end %> 
    </td> 
<% end %> 

因此,對於上面的問題,遍歷每個環的ID,這會給你的身份證號碼,發現它在使用.name方法的類別模型。所以我想你的解決方案看起來像這樣:

<% @employees.each do |employee| %> 
    <td> 
    <% employee.category_ids.each do |category| %> 
     <%= Category.find(category).name %> 
    <% end %> 
    </td> 
<% end %> 

我希望這會有利於某人。

相關問題