1

2つのcollection_selectフィールドを持つフォームがあります。最初のフィールドは簡単なもので、コース名を示すcoursesという名前のモデルを取得し、もちろん選択したコースのIDを返します。2番目のフォームは問題が発生しています。で、コースが持つ可能性のある同様のコースのcollection_selectです。

コースモデル:

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

これは、Imが問題を抱えているフォームです。

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

まず、「類似した」ロジックをフォームから削除することをお勧めします。したがって、コントローラーで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 に答える
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

collection_selectのドキュメントから:

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

次に、あなたが持っているコードを使用するとCourse.find(Similar.find_by_id(:similar_id)).nametext_methodこのエラーメッセージが表示されます。

Similar model1つの解決策は、同様のコース名を取得するためのメソッドを追加することです。

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 に答える