Ruby on rails Rails集合\u选择多对多
我有一个表单,有两个collection\u select字段,第一个是简单的,它只得到一个名为courses的模型,它显示了课程名称,当然返回了所选课程的id,第二个是我有问题的,它是课程可能有类似课程的集合 课程模式: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
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" %>