0

我在问答模型之间建立了一个嵌套资源。这是我用来创建问题的表格,我只是包装相关信息:

<fieldset>
  <legend>Question</legend>
    <%= render 'new_question_fields', question_form: question_form %>

  <legend>Answer</legend>
    <%= question_form.simple_fields_for :answers do |answer_form| %>
      <%= render 'answer', f: answer_form %>
    <% end %>
</fieldset>

这是我的answer部分:

<div class="answer_fields well fields">
  <%= f.input :correct, label: 'This answer is correct.' %>
  <%= f.input :content, input_html: { rows: 3, class: 'span6' } %>
</div>

这是我的索引页面,显示问题:

<ul class="questions">
  <% @questions.each do |question| %>
    <li><%= question.content %></li>
    <ol class="answers">
      <% question.answers.each do |answer| %>
        <li><%= answer.content %></li>
     <% end %>  
    </ol>
  <% end %>
</ul>

在创建新问题的页面上,我为 4 个问题的答案构建了 4 个字段。这是 4 个文本区域的 html 代码,当它们在 html 中呈现时:

<textarea cols="40" id="question_answers_attributes_0_content" name="question[answers_attributes][0][content]" rows="3"></textarea>
<textarea cols="40" id="question_answers_attributes_1_content" name="question[answers_attributes][1][content]" rows="3"></textarea>
<textarea cols="40" id="question_answers_attributes_2_content" name="question[answers_attributes][2][content]" rows="3"></textarea>
<textarea cols="40" id="question_answers_attributes_3_content" name="question[answers_attributes][3][content]" rows="3"></textarea>

比如说,我的字段顺序是 0,1,2,3,但是当我保存问题时,答案的顺序是相反的,例如:

如果我输入了 4 个答案A,B,C,D,对应表单上 textarea 的顺序是0,1,2,3,当问题被保存时,它会显示:D,C,B,A,这意味着它首先保存了 textarea 的值question[answers_attributes][3][content],然后question[answers_attributes][2][content]...

更新:这是我的索引并在问题控制器中创建操作:

def index
  @questions = Question.where("user_id = ?", current_user.id).paginate(page: params[:page], per_page: 10)
end

def create
  @question = Question.new(params[:question])
  @question.question_type_id = params[:question_type_id]
  @question.user_id = current_user.id

  if @question.save
    flash[:success] = "Successfully created question."
    redirect_to questions_url
  else
    render 'new'
  end
end

我的answer模型:

class Answer < ActiveRecord::Base
  attr_accessible :content, :question_id, :correct
  belongs_to :question
end

保存问题时会发生什么?这是因为saverails的方法还是我的显示形式?

4

1 回答 1

0
  • question.answers.order("created_at ASC")...或者;
  • question.answers.order("created_at DESC")...

其中之一应该颠倒顺序。

--

但更多关于该主题 - 我想这是关于如何处理堆栈。您通过在创建每个答案时将其作为问题的属性传递来创建每个答案,这可能就是混合的地方。来自 Rails 和带有 log_level 的数据库的日志:debug应该有助于查看它是如何进入数据库的。

id ASC可能对您有用,因为您的 id 无论如何都会随着时间而增加,然后它与created_at ASC- 但依赖 id 可能并不总是一个好方法,因为有时 id 可能是随机的。

于 2012-11-09T20:06:19.640 回答