【发布时间】:2020-08-18 10:34:01
【问题描述】:
所以,我有 2 个表格。在其中之一中,我将表单提交给方法“create”,这是使用资源创建的默认方法:
resources :correlation_engine_rules
在这个表单中,我只是通过 simple_form 将表单与路径链接起来:
<%= simple_form_for(:correlation_engine_rule, url: correlation_engine_rules_path, :html => { :remote => true, :method => :post }) do |f| %>
现在,如果我提交,我会在我的控制器中调用名为“create”的方法:
def create
...things happening...
respond_to do |format|
if @rule.save
format.html { redirect_to correlation_engine_rules_path(value: @cep_status), notice: "#{I18n.t('controllers.rule_created')}" }
format.js { flash[:notice] = "#{I18n.t('controllers.rule_created')}" }
format.json { head :no_content }
else
format.html do
redirect_to correlation_engine_rules_path(@rule),
alert: @rule.errors.full_messages.map { |msg| "<li>#{msg}</li>" }.join
end
format.js
format.json { render json: @rule.errors, status: :unprocessable_entity }
end
end
end
规则被保存,页面被重定向到该路径。这是有效的。现在,我想要一个新表单,用另一个方法控制器来处理这些新字段。
所以,我创建了新路线:
resources :correlation_engine_rules do
get :basic_rule_2, on: :collection
post :create_basic_rule_2, on: :collection
end
然后我将新表单与我的新方法控制器(create_basic_rule_2)相关联:
<%= simple_form_for(:correlation_engine_rule, url: create_basic_rule_2_correlation_engine_rules_path, :html => { :remote => true, :method => :post }) do |f| %>
当我提交时,控制器被正确调用,问题出现在执行与以前完全相同的重定向时。这里重定向失败,它试图呈现一个名为“create_basic_rule_2”的视图,我不明白。我告诉他像以前一样重定向到 correlation_engine_rules_path。
def create_basic_rule_2
...things happening...
respond_to do |format|
if @rule.save
format.html { redirect_to correlation_engine_rules_path(value: @cep_status), notice: "#{I18n.t('controllers.rule_created')}" }
format.js { flash[:notice] = "#{I18n.t('controllers.rule_created')}" }
format.json { head :no_content }
else
Rails.logger.error "\n\n\n\ NO GUARDADO"
format.html do
redirect_to correlation_engine_rules_path(@rule),
alert: @rule.errors.full_messages.map { |msg| "<li>#{msg}</li>" }.join
end
end
end
end
困扰我的是完全相同的代码,无论您身在何处,路径都是相同的,所以为什么 create 不渲染一个名为“create”的视图,但我的方法 create_basic_rule_2 试图渲染一个名为“create_basic_rule_2”的视图?
这是我得到的错误:
<ActionView::MissingTemplate: Missing template correlation_engine_rules/create_basic_rule_2, application/create_basic_rule_2 with {:locale=>[:es, :en], :formats=>[:js, :html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder]}. Searched in:
* "/opt/rb/var/www/rb-rails/lib/modules/vault/app/views"
* "/opt/rb/var/www/rb-rails/lib/modules/social/app/views"
* "/opt/rb/var/www/rb-rails/lib/modules/monitor/app/views"
* "/opt/rb/var/www/rb-rails/lib/modules/location/app/views"
* "/opt/rb/var/www/rb-rails/lib/modules/ips/app/views"
* "/opt/rb/var/www/rb-rails/lib/modules/flow/app/views"
* "/opt/rb/var/www/rb-rails/lib/modules/correlation_engine_rule/app/views"
* "/opt/rb/var/www/rb-rails/app/views"
* "/usr/local/rvm/gems/ruby-2.1.2/gems/devise-3.5.10/app/views"
>
【问题讨论】:
-
无法回答此问题,因为它没有可重现的示例来显示您所询问的行为。如果您不截断错误消息也会有所帮助。
-
为什么我的控制器方法试图渲染一个名为相同的视图?我怎样才能阻止这种情况发生?这两种方法具有相同的重定向,一种有效,另一种无效。我不能告诉你如何重现这个,因为我也不知道问题是什么或原因是什么。
-
“我怎样才能阻止这种情况发生?” - 渲染、重定向或返回 false 将阻止 rails 隐式渲染。 api.rubyonrails.org/classes/ActionController/…
-
“我不能告诉你如何重现这个,因为我也不知道问题是什么或原因是什么。” - 你希望有人不知道你在做什么,没有看到触发错误的实际代码知道发生了什么?如果您无法完成减少问题的基本步骤,那么除了疯狂猜测之外,任何人都无能为力。
-
一种方法是尝试渲染具有相同名称的视图,但另一种方法不是,尽管代码相同。也许有人知道为什么会发生这种情况,尽管他无法重现该错误。我知道你在说什么,但这不是我第一次看到人们在没有正确说明问题所在的情况下得到答案,所以我想在这里试试运气,就是这样。无论如何,我编辑了我的问题,以防它现在更清楚,但这几乎就是全部,我的错误中没有更多代码。
标签: ruby-on-rails ruby routes simple-form