我的数据模型是学生与老师联系。我的学生报名表将有一个教师用户名字段,我想根据现有的教师记录进行验证。我将如何在app / view / student / new.html.erb文件中完成此操作?现在,我刚才有这个:
<tr>
<th>Teacher ID</th>
<td><%= f.number_field :teacher_id %></td>
</tr>
我想将其设为:teacher_username,然后针对教师表进行验证。如果找到匹配项,我想获取teachers.id字段并将其传递以插入到学生表中。如果找不到匹配项,那么我想标记一个错误,即没有这样的教师用户名。我怎样才能做到这一点。任何示例代码都会有所帮助。
学生模型文件中包含belongs_to:teacher。教师模型文件中有has_many:学生。
答案 0 :(得分:2)
正如 @Iceman 建议的那样,drop-down
框适合您的目的。
在您的/views/student/new.html.erb
中,您可以执行此操作
<tr>
<th>Select Teacher</th>
<td><%= f.select :teacher_id,Teacher.all.collect {|t| [ t.teacher_username, t.id ] },{ include_blank: true } %></td>
</tr>
这将确保records
中只有teachers table
中存在的drop-down
可用于validation
,并简化了您正在寻找的{{1}}部分。
答案 1 :(得分:1)
我想把它作为:teacher_username,然后验证 老师桌。如果找到匹配,我想得到teachers.id 字段并传递它以插入学生表。如果匹配 没找到,那我想标记一个没有这样的老师用户名的错误 存在。我怎样才能做到这一点。任何示例代码都会有所帮助。
您可能需要查看ActiveRecord validations
更具体地说,我做了之类的事情:
#app/models/teacher.rb
Class Teacher < ActiveRecord::Base
vaidates :username, uniqueness: true
end
我提及&#34;喜欢&#34;因为您想将详细信息传递到student
表。如果您使用accepts_nested_attributes_for
执行此操作,那么它没问题;但是,如果您不是,那么您可能希望透露您的流程,以便我们帮助您定义它
-
<强>更新强>
更彻底地阅读了您的问题后,您似乎正在尝试查找教师的用户名,如果存在,请将id
传递回student
表
drop down
可能是最佳选择,但是如果您想查找名称,则必须在students
控制器上调用操作来验证用户名通过ajax,如:
#app/controllers/students_controller.rb
def check_teacher
teacher = Teacher.find_by username: params[:userame]
end
但是在正确阅读问题之后,我建议下拉