从rails中的Ajax渲染Form部分

时间:2016-03-05 07:35:58

标签: javascript ruby-on-rails ajax

我的表格如下图所示:

Form with partial

然后我想从ajax调用渲染这个部分:来自.js.erb。但是我不知道如何将对象从部分传递给f。见下图:

如何将对象传递给f:

file .js.erb

3 个答案:

答案 0 :(得分:1)

添加:remote => true它会使按钮异步(Ajax调用)。

<强> index.html.erb

<%= link_to "Add Journal", new_journal_path, remote: true, class: 'new_journal_button'%>

<强> new.js.erb

$('.new_journal_button').after("<%= j render('form') %>");
$('.new_journal_button').hide();
  

如果要异步提交表单(Ajax调用)

<强> _form.html.erb

<%= form_for(@journal, remote: true) do |f| %>
  <div class="field">
    <%= f.label "journal" %><br>
    <%= f.text_field :title, placeholder: 'Journal', autofocus: true, 'data-behavior' => 'submit_on_enter' %>
  </div>
<% end %>

<强> Journals_controller.rb

  def index
     @journal = Journal.new
     @journals = Journal.all
  end

  def create
    @journal = Journal.new(journal_params)
    respond_to do |format|
      if @journal.save
        format.html { redirect_to @journal, notice: 'Journal was successfully created.' }
        format.js
      else
        format.html { render :new }
      end
    end
  end

答案 1 :(得分:0)

一段时间以来,我一直在考虑如何替换表格的一部分(如果您正在这样做)。以下内容并不完美,但“为我工作”。

我们在控制器中(而不是视图中)实例化表单生成器 f ,仅将部分代码呈现为字符串。然后像往常一样转义并将js渲染为Ajax答复。

  def show
    respond_to do |format|
      format.js do
        helpers.form_for(@journal) do |f|
          out = render_to_string partial: 'journal_entry_transaction_fields', locals: {f: f}
          render js: %($('.journal-entry').html("#{helpers.j out}");)
        end
      end
    end
  end

也许与Turbolinks友好并使用jQuery发送Ajax的相应coffeescript部分类似于

$(document).on 'change', '#something', (e) ->
  $.get
    url: "/path/to/your/controller/#{e.target.value}.js"

答案 2 :(得分:0)

您可以发送@journal对象,然后使用fields_for @journal进行部分

.js.erb

$('.journal-entry').html("<%= j render partial: 'journal_entry_transaction_fields', object: @journal %>");

部分 .html.erb

<%= fields_for @journal do |f| %>
   ... code .....
<% end %>