配列["Yes"、true]がどこから来たのかはわかりません。私はこのような2つのモデルを持っています:
GeneralExam has_many topic_questions
TopicQuestion belongs to general_exam, belongs_to topic
TopicQuestionには、general_exam_id、topic_id、number_questionの列があり、一般試験の各トピックの番号の質問を格納します。
新しい一般試験を作成するためのネストされたフォームを作成しました。動的選択を作成したフォームで、ユーザーがドロップダウンリストからコースを選択すると、ユーザーが選択したコースのトピックを表示する他のドロップダウンリストがあります。
これは、動的選択用のJavaScriptコードです。
<% content_for :head do %>
<script type="text/javascript">
$(document).ready(function() {
$('#general_exam_course_id').change(function () {
$.ajax({
type: "POST",
url: "<%= update_topics_general_exams_path %>",
data: { course_id: $('#general_exam_course_id').val() },
dataType: "script"
});
});
</script>
<% end %>
#general_exam_course_id
選択したコースのドロップダウンリストのIDです。一般的な試験コントローラーでupdate_topics_general_exams_path
の私の行動へのルートです、これは私の行動です:update
update
def update_topics
@course = Course.find(params[:course_id])
@topics = @course.topics
end
私も持っていupdate_topics.js.erb
ます:
$('div#topic_questions select').html("<%= j options_from_collection_for_select(@topics, 'id', 'name') %>");
のドロップダウンリストは、アクションから値div#topic_questions
を取得し(私はそう思います)、それを表示します。私が新しい一般試験を作成するとき、それは大丈夫です。しかし、リンクを押すと、理由と場所がわからないエラーが表示されます。@topics
update_topics
Edit
NoMethodError in General_exams#edit
undefined method `name' for ["Yes", true]:Array
Extracted source (around line #3):
1: <div class="row">
2: <div class="span6"><%= remove_child_link "Remove below topic", f %></div><br><br>
3: <div class="span3"><%= f.association :topic, collection: @topics, label_method: :name, value_method: :id, prompt: "Choose a topic", label: false %></div>
4: <%= f.input :number_question, placeholder: 'Number of questions', label: false, style: 'display: inline' %>
5: </div>
私のedit
行動には次のものしかありません:@general_exam = GeneralExam.find(params[:id])
。topic
一般試験の連想フィールドに配列が表示される理由がわかりません["はい"、true]。私はそれを持っていません、それをどこにも定義しません、なぜ私が一般試験を編集するときにそれが来るのですか?
アップデート
私が削除label_method: :name, value_method: :id
した場合:
<%= f.association :topic, collection: @topics, label_method: :name, value_method: :id, prompt: "Choose a topic", label: false %>
このページはエラーではありませんが、ドロップダウンリストにはYes, No
、試験用に作成したトピックの名前ではなく、selectに値があります。フォームは各トピックの番号の質問を取得できますが、トピックの名前を取得することはできません。
私が作成するとき:
私が編集するとき:
私はこれを見つけましたconfig/locales/simple_form.en.yml
:
en:
simple_form:
"yes": 'Yes'
"no": 'No'
これは問題ですか?
更新:新しいアクションで@topicsを渡さないでください。ただし、コースがまだ選択されていない場合でも、新しいページに残ります。
私の新しい行動:
def new
@general_exam = GeneralExam.new
5.times { @general_exam.topic_questions.build }
#@topics = Topic.all
end
上記の抽出ソースと同様に、以下のコードを新規に編集します(同じフォームを使用)。
<%= f.association :topic, collection: @topics, label_method: :name, value_method: :id, prompt: "Choose a topic", label: false %>
したがって、@ topicsは渡しませんが、新しいページに移動すると、トピックのドロップダウンリストにYes, No
値が表示されます。