在视图上看不到来自控制器的变量 - Rails 6
Can't see a variable from a controller on a view - Rails 6
我叫 Carlos,我正在写信,我是 Rails 6.
的新人
我正在开发我的应用程序,试图在视图中显示从表单获取的变量,但我看不到它。
我正在使用 form_with 将参数(无模型)发送到控制器的 URL。
Meteo View 上的表格 (app\views\meteo\form.html.erb):
发送参数“:condition_met”到"briefing show controller URL":
<div class="form-group text-center">
<%= form_with url: briefing_show_path, id: "met" do |fo| %>
<div class="field">
<%= fo.label "Condición Actual" %><br>
<%= fo.text_area(:condition_met) %>
</div>
<%= fo.submit "Enviar" %>
<% end %>
</div>
简报控制器 (app\controllers\briefing_controller.rb):
正在尝试将“[:condition_met]”的值保存到“@condition_met”:
def show
if params.has_key?(:condition_met)
@condition_met = params[:condition_met]
end
end
发布会现场(app\views\briefing\show.html.erb):
正在尝试在视图中显示“[:condition_met]”的值:
<div>
<%= "#{@condition_met} " %>
</div>
当我点击提交按钮时,控制台实际上显示哈希被发送到URL:
Started POST "/briefing/show" for 127.0.0.1 at 2020-02-22 10:24:42 -0300
Processing by B**riefingController#show** as JS
**Parameters: {"condition_met"=>"Test"**, "commit"=>"Enviar"}
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 5], ["LIMIT", 1]]
↳ app/controllers/briefing_controller.rb:4:in `show'
Rendering briefing/show.html.erb within layouts/application
Rendered briefing/show.html.erb within layouts/application (Duration: 1.1ms | Allocations: 211)
[Webpacker] Everything's up-to-date. Nothing to do
Rendered partials/_nav.html.erb (Duration: 2.7ms | Allocations: 5906)
Completed 200 OK in 68ms (Views: 64.3ms | ActiveRecord: 0.1ms | Allocations: 25974)
视图上没有显示任何内容:<%= "#{@condition_met} " %>。
我在网上尝试了一些解决方案,但没有任何效果。
此致!
更新:
这是我的 route.rb:
get "meteo", to:"meteo#show"
get "meteo/form", to:"meteo#form"
post "meteo/form", to:"meteo#form"
get 'briefing/index'
get 'briefing/show'
post "briefing/show", to:"briefing#show"
我使用了浏览器检查器,我看到当创建 POST 时,检查器会在答案中显示变量,但是当我转到查看页面时,它没有显示:
如果我使用 <%= @condition_met.inspect %> 我会得到 "nil"
form_with
默认是ajax
请求,你在show
操作中没有处理,添加local: true
解决问题
<%= form_with url: briefing_show_path, local: true, id: 'met' do |fo| %>
试一试。
我叫 Carlos,我正在写信,我是 Rails 6.
的新人我正在开发我的应用程序,试图在视图中显示从表单获取的变量,但我看不到它。
我正在使用 form_with 将参数(无模型)发送到控制器的 URL。
Meteo View 上的表格 (app\views\meteo\form.html.erb):
发送参数“:condition_met”到"briefing show controller URL":
<div class="form-group text-center">
<%= form_with url: briefing_show_path, id: "met" do |fo| %>
<div class="field">
<%= fo.label "Condición Actual" %><br>
<%= fo.text_area(:condition_met) %>
</div>
<%= fo.submit "Enviar" %>
<% end %>
</div>
简报控制器 (app\controllers\briefing_controller.rb):
正在尝试将“[:condition_met]”的值保存到“@condition_met”:
def show
if params.has_key?(:condition_met)
@condition_met = params[:condition_met]
end
end
发布会现场(app\views\briefing\show.html.erb):
正在尝试在视图中显示“[:condition_met]”的值:
<div>
<%= "#{@condition_met} " %>
</div>
当我点击提交按钮时,控制台实际上显示哈希被发送到URL:
Started POST "/briefing/show" for 127.0.0.1 at 2020-02-22 10:24:42 -0300
Processing by B**riefingController#show** as JS
**Parameters: {"condition_met"=>"Test"**, "commit"=>"Enviar"}
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 5], ["LIMIT", 1]]
↳ app/controllers/briefing_controller.rb:4:in `show'
Rendering briefing/show.html.erb within layouts/application
Rendered briefing/show.html.erb within layouts/application (Duration: 1.1ms | Allocations: 211)
[Webpacker] Everything's up-to-date. Nothing to do
Rendered partials/_nav.html.erb (Duration: 2.7ms | Allocations: 5906)
Completed 200 OK in 68ms (Views: 64.3ms | ActiveRecord: 0.1ms | Allocations: 25974)
视图上没有显示任何内容:<%= "#{@condition_met} " %>。
我在网上尝试了一些解决方案,但没有任何效果。
此致!
更新:
这是我的 route.rb:
get "meteo", to:"meteo#show"
get "meteo/form", to:"meteo#form"
post "meteo/form", to:"meteo#form"
get 'briefing/index'
get 'briefing/show'
post "briefing/show", to:"briefing#show"
我使用了浏览器检查器,我看到当创建 POST 时,检查器会在答案中显示变量,但是当我转到查看页面时,它没有显示:
如果我使用 <%= @condition_met.inspect %> 我会得到 "nil"
form_with
默认是ajax
请求,你在show
操作中没有处理,添加local: true
解决问题
<%= form_with url: briefing_show_path, local: true, id: 'met' do |fo| %>
试一试。