我一直被困在這最後幾天,無法找到答案。Rails渲染另一模型的模態 - 路由或JavaScript問題?
我有一個調用template_modal表單的配置文件表單。配置文件可以使用template_modal每次上傳多個模板。
模態顯示,但按下提交後,它重定向到profiles_controller#創建時它應該是templates_controller#創建,所以如何將模板保存到數據庫?如果這是一個小調整,請讓我知道。預期的行爲是保存模板並在profile-form上使用AJAX顯示。
SO和博客上的所有示例都有一個模型模型,並且未解決2個控制器的這個問題。
我不確定是否路由問題與路由決定了控制器。實際上,Template模型也具有非模態形式,但我已經在模板視圖中分別爲模態和非模態形式命名了部分。從技術上講,創建非模態模板時,路徑顯示爲:user/1/templates/new
,現在通過渲染模態,我已經在profile/new
上,它渲染另一個模型的模態,因此會對要訪問哪個控制器的創建動作感到困惑。
我從here拿起代碼片段:
這裏是代碼:
profiles_controller - 它呈現template_modal
<%= bootstrap_form_for @profile do |f| %>
#Some fields of profile form
<%= link_to "Add Template", new_user_company_template_path(current_user), remote: true, class: "btn btn-primary", 'data-toggle' => 'modal' %>
<div id="template-modal" class="modal fade"></div>
<table class='table' id='template_table'>
<thead>
<tr>
<th>Name</th>
<th>Template</th>
<th> View </th>
<th> Delete </th>
</tr>
</thead>
<tbody class="template-index">
<% @company_templates.each do |co_template| %>
<%= render "company_templates/list", locals: {company_templates: @company_templates} %>
<% end %>
</tbody>
</table>
<% end %>
的意見/ company_templates/_list.html.erb
<% @company_templates.each do |co_template| %>
<tr>
<td><%= co_template.name %></td>
<td><%= co_template.template.file.basename %></td>
<td><%= link_to 'Download', co_template %></td>
<td><%= link_to 'Delete', co_template, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
個視圖/ company_templates/new.js.erb
視圖/ company_templates/_form_modal.html.erb
<div class="modal-dialog" id="new_template_modal">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel"> Add New Template </h4>
</div>
<%= form_for [current_user, CompanyTemplate.new], :url => url_for(:controller => 'company_templates', :action => 'create', params: {id: current_user.id}), remote: true, html: { style: "display:inline;" } do |f| %>
<div class="modal-body">
<ul class="errors"></ul>
<%= f.hidden_field :company_id, :value => params[:user_id] %>
<div class="form-group">
<%= f.label :" Template Name ", class:"control-label" %>
<%= f.text_field :name, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :"Upload template", class: "control-label" %>
<%= f.file_field :template, class: "form-control" %>
<small>(File Restrictions: Only allowed - '.doc', '.docx', '.txt', '.rtf' & '.pdf' less than 2MB).</small>
</div>
</div>
<div class="modal-footer">
<%= f.submit "Submit Template", class: "btn btn-primary" %>
<%= link_to "Cancel", "#", class: "btn", data: {dismiss: "modal"} %>
</div>
<% end %>
</div>
</div>
company_templates_controller.rb
def create
@company_templates = current_user.company_templates.all.order(created_at: "DESC")
@company_template = CompanyTemplate.new(company_template_params)
respond_to do |format|
if @company_template.save
format.html { redirect_to @company_template, alert: 'The template was successfully created.' }
format.json { render action: 'show', status: :created, location: @company_template }
format.js { render 'save', status: :created, location: @company_template }
else
format.html { render action: 'new', alert: 'Problem uploading CV.Check if the file is one of .doc/.docx/.pdf type & less than 2MB).'}
format.json { render json: @company_template.errors, status: :unprocessable_entity }
# added:
format.js { render json: @company_template.errors, status: :unprocessable_entity }
end
end
視圖/ company_templates/_save.js .erb
$("ul.errors").html("")
<% if @company_template.errors.any? %>
<% @company_template.errors.full_messages.each do |message| %>
$("ul.errors").append($("<li />").html("<%= message.html_safe %>"))
<% end %>
<% else %>
$(".template-index").html("<%= escape_javascript(render partial: 'list', locals: {co_template: @company_template }) %>")
$("#new_template-modal").modal("hide");
$('#template_table').append("<%= j render partial: 'list', locals: {co_template: @company_template } %>");
$('#new_template_modal').modal("hide");
<% end %>
請告訴我我做錯了什麼?謝謝。
沒有進入細節,但你肯定不會渲染另一個表單中的表單? – Mandeep
Thx Mandeep。我沒有得到你的意思....一個模態對話框是從主要形式呈現的配置文件。該模式打開所有領域,但按模態的提交它提交主表格 - 配置文件。 – Means
你正在注入new_modal裏面的##template-modal *元素,它在你的個人資料表單中,因此是另一個表單裏面的一個表格 – Mandeep