通过ajax渲染编辑表单

时间:2014-10-09 20:34:53

标签: ruby-on-rails ajax forms simple-form

我正在尝试通过ajax呈现表单。它适用于创建新场地,但在尝试编辑现有场地时,场地数据应加载到表单中。调用编辑场地链接时会呈现表单(_modal),但表单将作为新表单处理,所有字段都为空白。在binding.pry中调用@venue,我们看到正确的场地对象。

如何将表单作为编辑处理而不是新处理?思路:

  • respond_to do |format| 
           format.js   { *do stuff* }
    
  • 添加更多参数以形成?

  • 手动执行 - 使用jquery
  • 更改表单属性和/或填写数据

感谢任何建议!

_modal.html.erb:

<section id="venue-modal" class='modal' title="Venue Form" class="">
  <%= simple_form_for(@venue, remote: true) do |v| %>
    <div id='closeButton'><a href='#'>x</a></div>
  <% binding.pry %>
    <%= v.input :name, label: "Venue Name" %>
    <%= v.input :city %>
    <%= v.input :state, collection: States.us_states %>

    <div class="actions">
      <%= v.submit 'Submit', class: 'button' %>
    </div>
  <% end %>
</section>

呈现以下html:

<form accept-charset="UTF-8" action="/venues" class="simple_form new_venue" data-remote="true" id="new_venue" method="post">

调用模态的链接:

<%= link_to edit_venue_path(venue), :remote => true, :class => "edit_venue_link" do %>

控制器:

def edit
  id = params[:id]
  if id == 'new'
    @venue = Venue.new
  else
    @venue = Venue.find(id)
  end
end

Venue.js:

$('.edit_venue_link').on("ajax:success", function(e, data, status, xhr) {
// stuff happens

1 个答案:

答案 0 :(得分:1)

用modal.js.erb中的这行代码替换模态内容:

$('#venue-modal').html("<%= escape_javascript(render partial: 'venues/modal') %>");

控制器:

def edit
  id = params[:id]

  if id == 'new'
    @venue = Venue.new
  else
    @venue = Venue.find(id)
  end
  respond_to do |format|
    format.js { render 'venues/modal' }
  end
end

剖面标签移出模态局部。然后表单识别@venue并正确加载字段。