1

我有一个包含两个 collection_select 字段的表单,第一个很简单,它只是获取一个名为 course 的模型,它显示课程名称,当然返回所选课程的 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>

我收到以下错误

http://dpaste.com/hold/827744/

Bartolleti 的东西是我希望能够显示的课程的名称,这当然不是一种方法,但我不知道为什么会出现错误,我希望能够显示给定的类似课程的名称第一个收藏领域的课程...

谢谢您的帮助!

4

3 回答 3

0

collection_select 的文档中

collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})

然后使用您的代码Course.find(Similar.find_by_id(:similar_id)).name作为text_method,这就是您收到此错误消息的原因。

一种解决方案可能是在您身上添加一种方法Similar model来获得相似的课程名称:

def similar_name
  similar.name
end

然后你可以将它用作text_method你的collection_select

<%= f.collection_select :homologate_by, Similar.find(:all), :similar_id, :similar_name, :prompt => "Select a Similar Course" %>
于 2012-11-09T07:58:34.373 回答
0

这里的问题是,

        <%= 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.

因此,最好在控制器中编写 Similar.find(:all) 。

于 2012-11-09T07:30:11.880 回答
0

首先,我建议将您的“类似”逻辑从表格中删除。因此,在控制器中对其进行 find.all 并在视图中将其用作实例变量 @similar_list 左右。

其次,在此处查看您的表单的 options_from_collection_for_select:

http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/options_from_collection_for_select

让我知道这是否对您有帮助。

于 2012-11-09T02:23:59.990 回答