gpt4 book ai didi

javascript - Rails 渲染另一个模型的模式 - 路线或 javascript 问题?

转载 作者:行者123 更新时间:2023-12-03 04:48:01 26 4
gpt4 key购买 nike

最近几天我一直被这个问题困扰,找不到答案。

我有一个调用 template_modal 表单的个人资料表单。使用 template_modal,Profile 每次可以上传多个模板。

模式正在显示,但按下提交后,它会重定向到profiles_controller#create,而它应该是templates_controller#create,那么如何将模板保存到数据库?如果有一点调整,请告诉我。预期的行为是保存模板并在个人资料表单上使用 AJAX 显示。

SO 和博客上的所有示例都有一个单一的模型模式,并且 2 个 Controller 的问题没有得到解决。

我不确定路由是否有问题,因为路由决定 Controller 。实际上,模板模型也有非模态形式,但我在模板 View 中为模态和非模态形式分别命名了部分。从技术上讲,当创建非模态模板时,路由显示:user/1/templates/new,现在通过渲染模态,我已经在 profile/new 上,它是另一个模型的渲染模式,因此对要访问哪个 Controller 的创建操作感到困惑。

我从 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 %>

views/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>

View /company_templates/new.js.erb

$("#template-modal").html("<%= escape_javascript(render 'new_modal') %>")
$("#template-modal").modal("show")

views/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">&times;</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

views/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 %>

请告诉我我做错了什么?谢谢。

最佳答案

尝试

#views/company_templates/new.js.erb
$("#template-modal").remove();
$("body").html("<%=j render 'new_modal' %>");
$("#template-modal").modal("show");

关于javascript - Rails 渲染另一个模型的模式 - 路线或 javascript 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42785234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com