我的表格如下图所示:
然后我想从ajax调用渲染这个部分:来自.js.erb
。但是我不知道如何将对象从部分传递给f。见下图:
如何将对象传递给f:
答案 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 %>