如何将form_for的对象传递给文件`action_name.js.erb`中的部分呈现

时间:2012-11-21 15:13:31

标签: ruby-on-rails ruby-on-rails-3

在选择该课程时,我使用了一个动作来显示课程的所有主题。现在我想使用虚拟属性在表单上显示一个字段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

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

1 个答案:

答案 0 :(得分:2)

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

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的内容替换为主题数据。