您好我创建了2个表(类别和员工),两者都处于关系中,我想在员工索引视图中显示category_name(Categories表)而不是id
****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>
在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 :(得分:0)
<%= h e.category.category_name %>
会做到这一点。
请注意,如果您只是这样做,它将导致为您正在显示的每一行执行SQL查询(称为N + 1问题)。
所以在你的控制器中,你将不得不改变
@employees = Employee.all
到
@employees = Employee.find(:all, :include => [:category])
这会强制加载,并将查询数量减少到2。
(作为旁注,你现在应该已经转移到Rails 3了.Rails 4是最新的。每个版本提供的功能比上一个更多。)
答案 1 :(得分:0)
在您的员工索引视图中,
<td><%=employee.categories.category_name %>
instead of
<td><%=h e.categories_id %>
答案 2 :(得分: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 %>
答案 3 :(得分: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,这将给你id号,用.name方法在Category模型中找到它。所以我想你的解决方案看起来像这样:
<% @employees.each do |employee| %>
<td>
<% employee.category_ids.each do |category| %>
<%= Category.find(category).name %>
<% end %>
</td>
<% end %>
我希望这会使某些人受益。