我实际不知道 Array ["Yes",true] 来自哪里。我有两个这样的模型:
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
普通考试的关联字段显示一个数组[“是”,真]。我没有,在任何地方都没有定义它,为什么我编辑普通考试时会出现?
更新
如果我删除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
在选择中具有价值,而不是我为考试创建的主题名称。表单可以获取每个主题的编号问题,但不能获取主题名称。
当我创建:
当我编辑时:
我发现这个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
值。