Ruby on rails Rails集合\u选择多对多

Ruby on rails Rails集合\u选择多对多,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,我有一个表单,有两个collection\u select字段,第一个是简单的,它只得到一个名为courses的模型,它显示了课程名称,当然返回了所选课程的id,第二个是我有问题的,它是课程可能有类似课程的集合 课程模式: class Course < ActiveRecord::Base extend FriendlyId friendly_id :name, use: :slugged attr_accessible :code, :credits, :name, :de

我有一个表单,有两个collection\u select字段,第一个是简单的,它只得到一个名为courses的模型,它显示了课程名称,当然返回了所选课程的id,第二个是我有问题的,它是课程可能有类似课程的集合

课程模式:

class Course < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name, use: :slugged 
  attr_accessible :code, :credits, :name, :description, :active

  has_many :similars, dependent: :destroy
  has_many :similar_courses, through: :similars, source: :similar

end
类似模型:

class Similar < ActiveRecord::Base
  attr_accessible :course_id, :similar_id

  belongs_to :course
  belongs_to :similar, class_name: "Course"

  validates :similar_id, presence: true
  validates :course_id, presence: true

end
这是同系模型,这个模型的问题是,如果一个人想要转移课程或类似的东西,课程必须被批准或拒绝:

class Homologation < ActiveRecord::Base
  attr_accessible :homologate_by, :homologate_course, :student_id
  belongs_to :user
end
这是我遇到问题的表格:

<%= form_for(@homologation) do |f| %>
      <%= render 'shared/error_messages', object: @homologation %>
      <%= f.label :homologate_course %>
      <%= f.collection_select :homologate_course, Course.find(:all), :id, :name, :prompt => "Select a Course" %>

      <%= f.label :homologate_by %>
      <%= f.collection_select :homologate_by, Similar.find(:all), :similar_id, :name, :prompt => "Select a Similar Course" %>
    <div class="form-actions">
      <%= f.submit "Create Homologation", class: "btn btn-large btn-primary" %>
    </div>
    <% end %>
  </div>
我得到以下错误

Bartolleti是我想展示的课程名称,当然这不是一个方法,但我不知道为什么会出现错误,我想展示类似课程的名称,给出第一个集合字段course


谢谢你的帮助

首先,我建议您将类似的逻辑从表单中删除。因此,请在控制器中查找.all,并在视图中将其用作实例变量@similor_list等等

第二,查看表单选择的选项\u(来自\u集合\u):

如果这对你有任何帮助,请告诉我

这里的问题是

        <%= f.collection_select :homologate_by, Similar.find(:all), :similar_id, :name, :prompt => "Select a Similar Course" %>

          In this line :name is trying to find a record from course and the course name.
因此,最好编写类似的代码。在控制器中查找:all。

来自:

集合\选择对象、方法、集合、值\方法、文本\方法、选项={}、html \选项={}

然后在代码中有Course.findSimilar.find\u by\u id:simild\u id.name作为text\u方法,这就是为什么会出现此错误消息

一种解决方案是在类似的模型上添加一个方法,以获得类似的课程名称:

def similar_name
  similar.name
end
然后,您可以将其用作集合中的文本\u方法\u选择:

<%= f.collection_select :homologate_by, Similar.find(:all), :similar_id, :similar_name, :prompt => "Select a Similar Course" %>