2017-09-18 29 views
0

我想有一个下降,由其他模型的时候,在索引页如何显示名称,而不是在轨

显示它的名字,我有3代表“生”,“教室的ID “和”classroom_students“ 我正在尝试的是当学生创建时,他应该能够从教室表中填充的下拉列表中添加教室,此时下拉工作正常,但是它正在从中获取ID下拉

如何让教室名称索引页面中显示

课堂模式

class Classroom < ApplicationRecord 
    belongs_to :user 
    has_many :classroom_students 
    has_many :students, through: :classroom_students 
end 

学生模型

class Student < ApplicationRecord 
    has_many :classroom_students 
    has_many :classrooms, through: :classroom_students 
    validates :student_fname, presence: true, length: { minimum: 3, maximum: 50 } 
end 

classroom_student模式

class ClassroomStudent < ApplicationRecord 
    belongs_to :classroom 
    belongs_to :student 
end 

学生控制器

def student_params 
    params.require(:student).permit(:student_fname, :student_lname, :gender, :dob, :aboriginal, :esl, :special_provisions, :user_id, :classroom_id, :group_id, :active) 
end 

教室控制器

def classroom_params 
    params.require(:classroom).permit(:classroom_name, :classroom_year, :classroom_student) 
end 

学生意见的形式

<%= form.select :classroom_id, Classroom.where(:user_id => current_user.id).map {|r| [r.classroom_name, r.id]} %> 

学生指数

此刻却是ID,但我希望它是教室名称

<td><%= student.classroom_id %> 

架构文件

create_table "classroom_students", force: :cascade do |t| 
    t.integer "classroom_id" 
    t.integer "student_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

create_table "classrooms", force: :cascade do |t| 
    t.string "classroom_name" 
    t.date "year" 
    t.string "classroom_student" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "users_id" 
    t.integer "user_id" 
    t.string "classroom_year" 
    t.index ["users_id"], name: "index_classrooms_on_users_id" 
    end 

create_table "students", force: :cascade do |t| 
    t.string "student_fname" 
    t.string "student_lname" 
    t.boolean "gender" 
    t.string "dob" 
    t.boolean "aboriginal" 
    t.boolean "esl" 
    t.text "special_provisions" 
    t.integer "user_id" 
    t.integer "classroom_id" 
    t.integer "group_id" 
    t.boolean "active" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.string "classroom_name" 
    end 
+0

下拉菜单或学生索引页面上的课堂标识问题在哪里? – Deep

+0

我想你应该试试'student.classrooms.pluck(:classroom_name)'并遍历它们以表格格式显示名称 – Abhi

+0

你的联系表示''学生有很多教室',但是你的数据库模式说你有'clasroom_id'也在桌子上。那么你想要什么? – Deep

回答

1

你的协会认为, student has many classrooms但您的数据库架构表示您在students表中也有clasroom_id。如果您需要将student关联到多个classrooms,请先删除classroom_id。那么你的选择说:

<%= form.select :classroom_id, Classroom.where(:user_id => current_user.id).map {|r| [r.classroom_name, r.id]} %> 

现在,当你有多个classrooms关联到一个student所以这是行不通的,因为classroom_id无效。相反,它应该是这样的:

<%= f.select :classroom_ids, Classroom.where(user_id: current_user.id).map { |r| [r.classroom_name, r.id] }, {}, multiple: true %> 

这将多个classroomsstudent关联。

而且DONOT忘了在强PARAMS添加classroom_ids

def student_params 
    params.require(:student).permit(:student_fname, :student_lname, :gender, :dob, :aboriginal, :esl, :special_provisions, :user_id, :classroom_id, :group_id, :active, :classroom_ids => []) 
end 

希望这有助于。

+0

现在我在为学生展示教室时遇到问题,我试过 <%@ classroom.each do | element | %>

  • <%= element.classroom_name%>
<% end %> – user8595476

+0

@ user8595476问题是什么?请在问题中添加代码和问题。 – Deep

+0

我想只显示与学生相关的教室,我试过 <%@ classroom.each do | element | %> <%= element.classroom_name%> <% end %> ,它显示所有的教室 – user8595476

0

首先,你有一个关联用户的has_many:教室,所以你不能认为你只有1个教室。

你可以得到这样的事情相关联的用户的所有类:

<%= f.form_for @student do |f| %> 
    <%= f.collection_select(:classrrom_id, Classroom.all, :id, :classroom_name, 
{:prompt => "Select your classrooms"}, {:multiple => true}) %> 
    <% end %> 

而在你的students_controller.rb你应该添加classroom_ids到您的PARAMS

def student_params 
    params.require(:student).permit(:student_fname, :student_lname, :gender, 
:dob, :aboriginal, :esl, :special_provisions, :user_id, :classroom_id, 
:group_id, :active, :classroom_ids => []) 
end 
+0

感谢您的回复,现在我得到了“未定义的方法'教室',用于#” – user8595476

+0

因为这里学生是一个Active Record关系对象。所以,你已经做了一些行// @ student.first – LHH

+0

编辑,我没有注意到你正在尝试为一个学生选择多个教室。 –

相关问题