如何在rails中的new.html.erb中查找和验证外键

时间:2014-05-20 02:07:07

标签: ruby-on-rails

我的数据模型是学生与老师联系。我的学生报名表将有一个教师用户名字段,我想根据现有的教师记录进行验证。我将如何在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:学生。

2 个答案:

答案 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

但是在正确阅读问题之后,我建议下拉