我不知道必须从其他模型中获取关联和值的选择框。
例如,我有一个表course_names
来记录课程名称。
我还有其他表格,其他表格course
有更多列course_name_id
class Course < ActiveRecord::Base
belongs_to :course_name
end
现在,我必须创建student_profile并与courses
表关联。
class Student < ActiveRecord::Base
belongs_to :course
...
end
在简单形式的视图中,我必须创建一个选择框来选择课程。
<%= simple_form_for(@student_profile) do |f|%>
<% f.error_notification %>
<div class="form-inputs">
<%= f.association :course %>
但是这个协会并没有显示课程名称。
<select class="select optional form-control" id="student_course_id" name="student[course_id]"><option value=""></option>
<option value="3">#<Course:0x00000105c23818></option></select>
但我希望输出为(course_names选项的课程名称)
<select class="select optional form-control" id="student_course_id" name="student[course_id]">
<option value=""></option>
<option value="3">course-name</option>
</select>
我是如何做到这一点的。 一,解决方案
<%= f.association :course,collection:Course.all.includes(:course_name).map{|a|[a.course_name.name,a.id]} %>
但这看起来不对吗?我如何告诉协会从协会获取课程名称。
答案 0 :(得分:1)
您是否尝试过使用此标签:label_method:
<%= f.association :course, label_method: :course_name %>
或者当然课程属于course_name,也许你想要这个:
<%= f.association :course, label_method: lambda { |course| "#{course.course_name.name}"} %>
修改要避免所有查询,您应该预加载数据
courses = Course.includes(:course_name)
然后按以下方式使用
<% f.association :course, collection: courses, label_method: lambda { |course| "#{course.course_name.name}" } %>