【问题标题】:Get association for the nested model in simple_form在 simple_form 中获取嵌套模型的关联
【发布时间】:2014-07-29 13:58:24
【问题描述】:

我不知道必须从其他模型中获取关联和值的选择框。 例如我有一个表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">#&lt;Course:0x00000105c23818&gt;</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]}  %>

但这似乎不对?我如何告诉协会去从协会获取课程名称。

【问题讨论】:

    标签: ruby-on-rails ruby simple-form


    【解决方案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}" } %>
    

    【讨论】:

    • 是的,第二个选项就是答案。但它产生了 N+1 查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    • 2017-02-16
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多