不知道如果你還在這方面的工作,我也有類似的問題,並通過執行以下解決它:
我使用jQuery UI的對話,而不是引導模式爲不能讓這行得通。所以如果沒有它,請在那裏添加庫。
資產/ JavaScript的/ application.js中
我有
$(document).ready(function() {
var modal=$('#modal');
$('#edit_house_link').click(function(e) {
var edit_url = $(this).attr('href');
modal.load(edit_url + ' #content',function(){
modal.dialog("open");
});
});
modal.dialog({ autoOpen: false, title: "Your title", draggable: true,
resizable: false, modal: true, width:'auto'});
});
在我的佈局
然後/ application.html.erb我有網頁的身體,這是內部
<p id="modal"></p>
某處我們要加載所有信息的元素。
在我的索引視圖中,我有處理這個問題的鏈接,請注意,我的模型被稱爲house,所以改爲任何你所稱的。
<%= link_to 'Edit', edit_house_path(house), :remote => true, :id => 'edit_house_link' %>
正如你所看到的,我給這個edit_house_link ID,這我引用了的application.js文件。
房子控制器內部我有:
def update
@house = House.find(params[:id])
respond_to do |format|
if @house.update_attributes(params[:house])
format.js
else
format.js
end
end
end
,然後我有三個視圖,一個是edit.html.erb,update.js.erb和_form.html.erb所述視圖/房屋夾。
所以內部的意見/房/ update.js.erb我有:
<%- if @house.errors.any? %>
$('#modal').html('<%= escape_javascript(render('form')) %>');
<%- else %>
$('#modal').dialog('close');
$('#modal').remove();
window.location.reload();
<%- end %>
這段代碼是爲了防止從模式關閉,應該有錯誤。正如您所看到的,如果沒有錯誤存在,那麼它將關閉對話框並刷新頁面以顯示更改。
的意見/房/ edit.html.erb這個文件
是我:
<div id="content">
<%= render :partial => 'form' %>
</div>
所以如果你在的application.js文件中的內容ID再看看,我們加載此模態內。
最後是部分views/houses/_form.html。ERB
<%= simple_form_for(@house, :html => { :class => 'form-vertical' }, :remote => true) do |f| %>
<fieldset>
<%= f.input :address %>
<%= f.input :postcode %>
<%= f.input :city %>
<%= f.input :country %>
</fieldset>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
我使用simple_form,這樣你就可以通過具有正常形態適應您的需求,但我不得不添加:遠程=>真正爲它的實際工作屬性。
希望這有助於!
你能給我一個如何做到這一點的例子嗎?我一直在靠牆試圖弄清楚這一點無濟於事。 – 2012-04-02 17:55:07
具體而言,我希望字段在模式中預先填充,因爲它們位於編輯頁面上。你能澄清我應該如何呈現JS來呈現我的表單部分? – 2012-04-02 19:21:20