我的rails 5应用程序中有一个表单,该表单接收用户数据并将其存储在mysql数据库中。
一切正常。但是,我想将此表单移到一个单独的视图中,该视图与其类名/模型,控制器名称和视图不对应。
能否仅通过将表单作为部分视图呈现到单独的视图中来完成此操作?
任何建议都会很棒。
控制器文件:
class UserLeadsController < ApplicationController
def index
@user_lead = UserLead.all
end
def new
@user_lead = UserLead.new
@lead_reasons = LeadReason.all.map{ |r| [r.name, r.id] }
@lead_sources = LeadSource.all.map{ |s| [s.name, s.id] }
end
def create
@user_lead = UserLead.new(user_lead_params)
@user_lead.lead_reason_id = params[:lead_reason_id]
@user_lead.lead_source_id = params[:lead_source_id]
@user_lead.save
redirect_to user_leads_path
end
private
def user_lead_params
params.require(:user_lead).permit(:name, :businessname, :phone, :email, :amount)
end
end
可以说这是UserLeadController,我想将其窗体的一部分放置到HomeController内部的视图中吗?能做到吗?
这是局部的,它告诉我@user_lead为零或为空?我似乎看不到这是怎么回事?
<%= form_for @user_lead, url: user_leads_path, html: {class: 'col-12'}, remote: true do |f| %>
<div class="col-12 px-0 text-center">
<h4 class="fl-color-navy">Some heading here</h4>
</div>
<div class="col-12 progress-container-center">
<div class="col-12 progress-bar-block">
<div class="progress-bar">
<ol class="progress-steps">
<li class="progress-step step1 current-step" style="width: 0%;"> <span class="count highlight-index"></span></li>
<li class="progress-step step2 current-step" style="width: 100%;"> <span class="count"></span></li>
</ol>
</div>
</div>
</div> ....
答案 0 :(得分:0)
部分渲染表单可以正常工作。如果视图正确(提交UserLeadsController#create
,问题不包括视图代码),则提交表单会将浏览器正常引导到控制器。
如果像@lead_reasons
和@lead_sources
之类的东西对于渲染视图很重要,那就有些棘手了。当然,在简单的情况下,partial可以直接内联,例如,您还可以添加一个辅助方法,该方法获取这些方法,然后将通过的部分内容呈现给locals
参数。例如
module ApplicationHelper
def user_leads_form
lead_reasons = LeadReason.all.map{ |r| [r.name, r.id] }
lead_sources = LeadSource.all.map{ |s| [s.name, s.id] }
render partial: "user_leads_form", locals: {lead_reasons: lead_reasons, lead_sources: lead_sources}
end
end
在某些情况下,如果您希望它返回上一页,例如对于验证错误,您可能需要通过在表单中添加参数或检查Referer
请求标头(故意拼写错误!)来添加。
如果您希望它根本不离开页面,那么那就是进入客户端脚本解决方案了。