2013-05-27 135 views
0

我有2个表,即studentform和城市。城市表格有2列'id'和'name'。我在城市表中存储城市表中的'id'在我的studentform列'城市'如何连接两个表并显示所需的列值?

我必须通过加入'studentform'和'cities'表来显示他们城市的学生列表。

如何加入这两个表格并从城市表中获取城市名称,以存储在studentform表的“城市”列中的相应标识。

我尝试了下面的方法,但在输出列表中,城市列显示'id'值。如何改变它以显示'名称'?

class StudentForm < ActiveRecord::Base 
    has_many :cities 
end 

class City < ActiveRecord::Base 
    belongs_to :student_form 
end 
+2

这里没有明确的问题。所需的行为只是在选择下拉菜单中默认选择的保存ID对应的城市名称? – gregates

+0

不,那不是我的问题。默认选择的功能工作正常。但如何在列表视图中显示城市的名称而不是ID? – Abhishek

回答

0

我说得对不对,你希望每个StudentForm属于一个City?只有这样,您才能将city_id存储在StudentForm中。但随后你的模型是:

class StudentForm < ActiceRecord::Base 
    belongs_to :city 

    delegate :name, to: :city. prefix: true 
end 

class City < ActiceRecord::Base 
    has_many :student_forms 
end 

,你可以用

form = StudentForm.first 
puts form.city.name 

puts form.city_name 

在你的榜样,每个StudentForm的has_many :cities访问形式的城市的名字,所以City需要参考StudentForm(第student_form_id列)。

+0

SELECT s.firstname,c.name FROM student_forms小号 INNER JOIN城市C对c.id = s.id LIMIT 0,30 这是我所期待换我想我的指数显示学生姓名和city_name。目前,我的索引视图显示了学生姓名和city_id。现在,如何通过city_id显示各个学生的city_name? – Abhishek

+0

'student_form.city'是模型'City'的一个实例,所以'student_form.city.name'是属于'student_form'的'City'的属性'name'。 我想,这就是你要找的。 (但你选择的连接必须是'ON c.id = s.city_id') –

+0

在Rails中,你经常不必关心SQL,它是由ActiveRecord和AREL完成的。 –

相关问题