2016-09-17 10 views
0

私は以前にこの質問をしましたが、OPを乱しました。このための公式文書は、最高ではなく、ちょっと混乱しています。RoR:Collection_select未定義のメソッド

<%= f.collection_select :feedback_request, Feedback.order(:feedback_option), :id, :feedback_request, {prompt: "Feedback"}, {class: "select large-1 behaviourForm"} %> 

回答テーブル::私はフィードバックテーブルからオプションを収集し、フォーム上のドロップダウンでそれらをレンダリングして、いわゆる「答え」と呼ばれるテーブルと列に保存しようとしています「feedback_request」collection_selectを使用して

create_table "answers", force: :cascade do |t| 
     t.integer "user_id",    limit: 4 
     t.string "subject",    limit: 4 
     t.string "source",    limit: 45 
     t.text  "description",   limit: 65535 
     t.string "significance",  limit: 45 
     t.string "feedback_request" 
     t.datetime "created_at",      null: false 
     t.datetime "updated_at",      null: false 
    end 

    add_index "answers", ["feedback_request"], name: "feedback_index" 
    add_index "answers", ["significance"], name: "signif_index" 
    add_index "answers", ["source"], name: "source_index" 
    add_index "answers", ["subject"], name: "FK_HOM_MOD_idx" 
    add_index "answers", ["user_id"], name: "teacher_answer_index" 

フィードバックテーブル

create_table "feedback", force: :cascade do |t| 
    t.string "feedback_option", limit: 45 
    end 

モデル

feedback.rb 

    class Feedback < ActiveRecord::Base 
     self.table_name = 'feedback' 
     has_many :answers, :class_name => 'Answer' 
    end 

answer.rb 

    belongs_to :feedback, :class_name => 'Feedback', :foreign_key => :feedback_request 

フォーム:

<%= simple_form_for @answer do |f| %> 
    <%= f.collection_select :feedback_request, Feedback.order(:feedback_option), :id, :feedback_request, {prompt: "Feedback"}, {class: "select large-1 behaviourForm"} %><br> 

    <%= f.text_field :Due, :id => "datepicker", placeholder: "Due", data: { no_turbolink: true }, class: "behaviourForm select large-1" %> 

    <%= f.input :source, :as => :text, input_html: { :style=> 'width: 100%;', :rows => 2} %> 

    <%= f.input :description, :label => "Comments", :as => :text, input_html: { :style=> 'width: 100%;', :rows => 2} %> 


    <%= f.button :submit,'Create', class: "small button buttonSelect" %> 
<% end %> 

これは私に、フォームのロード時に次のエラーを与える:私はドキュメントをチェックし、それがはっきりしていないと言うのように

**undefined method `feedback_request' for #<Feedback id: 1, feedback_option: "Curriculum Management">** 

。私の髪を引き裂いているので、どんな指導も大いに感謝しています。ありがとう。

+0

エラーメッセージは、「応答」ではなく「フィードバック」で「feedback_request」を呼び出そうとしていることを示しています。フルフォーム(ラインだけでなく)を追加できますか? – spickermann

+0

こんにちは、ありがとう、私は私のフォームを追加しました... – Co2

答えて

1
<%= f.collection_select :feedback_request, Feedback.order(:feedback_option), :id, :feedback_request, {prompt: "Feedback"}, {class: "select large-1 behaviourForm"} %><br> 

四番目の引数:feedback_requestは、オプション名を決定するためにあなたのフィードバックのそれぞれに呼び出されるメソッドです。おそらくこれは:feedback_optionになります。

編集:3番目の引数は、のインスタンスメソッドで、値はAnswer#feedback_requestに割り当てられます。だから、それが:feedback_optionの文字列に変更されたければそれを変更してください。

<%= f.collection_select :feedback_request, Feedback.order(:feedback_option), :feedback_option, :feedback_option, {prompt: "Feedback"}, {class: "select large-1 behaviourForm"} %><br> 
+0

大丈夫、ありがとう、それは種類の作品ですが、それは文字列ではなくIDを印刷しているのですか?それは私のテーブルに "1"を印刷しています... – Co2

+0

それに対する解決策で私の答えを編集しました。 –

+0

ありがとうございます。私はここで文字列の代わりにIDを取得する必要がありますか?つまり、feedback_requestではなくfeedback_idでなければなりませんか?あなたの答えに基づいてアクティブな管理者でフィルタリングしようとしましたが、何も表示されませんでしたが、最初の引数としてfeedback_idをフィルタリングします。しかし、私はまだfeedback_request列を埋めたいと思っています...それはちょっとしたピクルスです。 – Co2

関連する問題