0

I have used an action to display all topics of a course, when that course is selected. 现在我想使用虚拟属性number_question在表单上显示一个字段,每个主题使用可以输入一个数字。我的模型:

class GeneralExam < ActiveRecord::Base
  attr_accessible :course_id, :description
  attr_accessor :numbe_question
end

这是我的表格:

<%= simple_form_for @general_exam, defaults: { error: false } do |f| %>
            <fieldset>
                <legend>General Exam information</legend>
                <%= render 'shared/error_messages', object: f.object %>
                    <%= f.association :course, collection: current_user.courses, prompt: "Choose Course for exam"  %>
                    <%= f.input :name %>
                    <%= f.input :description, input_html: { rows: 2, class: 'span6' } %>
            </fieldset>

            <fieldset>
                <legend>Choose number question for topics</legend>
                <div id="list_topics">
                </div>
            </fieldset>
            <%= f.submit class: "new_resource" %>
<% end %>

这是我的行动:

  def update_topics
    @course = Course.find(params[:course_id])
    @topics = @course.topics
  end

我的update_topics.js.erb

$('#list_topics').html("<%= j (render('general_exams/list_topics')) %>")

我的_list_topics.html.erb部分:

<% @topics.each do |topic| %>
    <h5><%= topic.name %></h3>
    <%# f.input :number_question, input_html: { name: "number_question[#{topic.id}]" } %>
<% end %>

但是如果我想显示输入字段,我必须有一个f对象,但是当我渲染时_list_topics,我没有。所以我想问一下如何将f形式对象传递给部分_list_topics

或者有人可以告诉我如何使用 jqueryh5在表单上的元素后添加输入字段,非常感谢。

4

1 回答 1

3

我认为有一些不同的方法可以解决这个问题。其中两个(我:

1)您可以定义一个不同的表单来将 number_question 数据发布到另一个控制器操作。2)当用户完成更新字段值时,使用jquery的更改回调提交number_question。

我认为第一个选项更好,更容易编码。你最终会得到这样的东西:

<%= simple_form_for @general_exam, defaults: { error: false } do |f| %>
    <fieldset>
        <legend>General Exam information</legend>
        <%= render 'shared/error_messages', object: f.object %>
            <%= f.association :course, collection: current_user.courses, prompt: "Choose Course for exam"  %>
            <%= f.input :name %>
            <%= f.input :description, input_html: { rows: 2, class: 'span6' } %>
    </fieldset>
    <%= f.submit class: "new_resource" %>
<% end %>

然后,您将在同一模板上使用不同的表单(提交主题编号):

<%= simple_form_for @general_exam, url: whatever_is_your_new_topics_number_path, defaults: { error: false } do |f| %>
    <fieldset>
        <div id="list_topics">
        </div>
    </fieldset>
<% end %>

您将继续使用您的 JS 部分响应,将 div 的内容相应地替换为主题数据。

于 2012-11-21T19:09:41.847 回答