我正在處理一個 rails 專案,但我被卡住了,因為盡管在控制臺中看起來像渲染一樣,但 rails 沒有渲染視圖。我在 Trip 腳手架的 index.html.erb 中有這個表格
<%= form_with(url: filter_path, method: "get") do |form| %>
<div class="field">
<%= form.label :from %>
<%= form.select :from, @places_arr %>
</div>
<div >
<%= form.label :to %>
<%= form.select :to, @places_arr %>
</div>
<div class="field">
<%= form.label :departure_date %>
<%= form.date_select :dep_date %>
</div>
<div >
<%= form.label :departure_time %>
<%= form.text_field :dep_time %>
</div>
<div class="field">
<%= form.label :price %>
<%= form.text_field :price %>
</div>
<div >
<%= form.label :rating %>
<%= form.text_field :rating %>
</div>
<div class="field">
<%= form.label :model %>
<%= form.select :model, @vehicles_arr %>  
</div>
<div >
<%= form.label :alimentation %>
<%= form.select :alimentation, @vehicles_alimentation %>
</div>
<div class="btn btn-primary">
<%= form.button :submit %>
</div>
<% end %>
這是重定向到操作的路由:
get 'trips/filter', to: 'trips#filter', as: 'filter'
控制器中的動作“過濾器”實際上是空的
def filter
end
我認為當我點擊表單上的“提交”時,我應該被重定向到視圖 filter.html.erb,但這不會發生。沒發生什么事。
在控制臺出現這個:
Started GET "/trips/filter?from=7&to=7&[dep_date(1i)]=2021&[dep_date(2i)]=11&[dep_date(3i)]=23&dep_time=&price=&rating=&model=&alimentation=benzina&button=" for 127.0.0.1 at 2021-11-23 19:24:55 0100
Processing by TripsController#filter as JS
Parameters: {"from"=>"7", "to"=>"7", "dep_date(1i)"=>"2021", "dep_date(2i)"=>"11", "dep_date(3i)"=>"23", "dep_time"=>"", "price"=>"", "rating"=>"", "model"=>"", "alimentation"=>"benzina", "button"=>""}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
? app/controllers/application_controller.rb:8:in `current_user'
Rendering layout layouts/application.html.erb
Rendering trips/filter.html.erb within layouts/application
Rendered trips/filter.html.erb within layouts/application (Duration: 0.0ms | Allocations: 4)
[Webpacker] Everything's up-to-date. Nothing to do
Rendered layouts/_flash.html.erb (Duration: 0.0ms | Allocations: 12)
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
? app/controllers/application_controller.rb:8:in `current_user'
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
? app/controllers/application_controller.rb:8:in `current_user'
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
? app/controllers/application_controller.rb:8:in `current_user'
Rendered layouts/_header.html.erb (Duration: 2.5ms | Allocations: 1458)
Rendered layout layouts/application.html.erb (Duration: 15.0ms | Allocations: 10550)
Completed 200 OK in 18ms (Views: 15.5ms | ActiveRecord: 0.4ms | Allocations: 11518)
有人能幫我嗎?
uj5u.com熱心網友回復:
在 Rails 6.1 之前,form_with默認remote: true為 JS 并將發送 XHR 請求。你可以看到這就是發生的事情:
Processing by TripsController#filter as JS
如果js.erb模板丟失,Rails 實際上不會引發,只會隱式呈現 HTML 模板,該模板被發送回瀏覽器,瀏覽器完全不做任何事情。
如果你想發送一個普通的同步請求,你需要在表單中明確設定它:
<%= form_with(url: filter_path, method: "get", local: true) do |form| %>
如果您想購買整個Server Side Concerns噱頭,您需要創建一個js.erb模板。
# filter.js.erb
document.getElementById("#myid")
.innerHTML = "<%= j render partial: 'some_partial' %>";
然而,Rails UJS(最終)在 Rails 7 中已經死了,所以它不是一個非常面向未來的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/365669.html
