[英]Display error message inside dialog after unsuccessful form submission
我有一個登錄表單,在用戶單擊鏈接后,該表單會在對話框中彈出。 在該表單中,我有兩個用戶名/密碼字段。 如果用戶成功登錄,它將重定向到他的個人資料頁面。 問題是用戶是否無法正確登錄。 我想在同一對話框中向他顯示一些消息,而不是關閉該對話框。
這是我的對話框:
<div id="login" >
<div>
<%= form_for(:session, url: sessions_path) do |f| %>
<%= f.label :username %>
<%= f.text_field :username %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.submit "Sign in", class: "btn" %>
<% end %>
</div>
</div>
這是我的會話控制器:
def create
user = User.find_by(username: params[:session][:username])
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_back_or(user)
else
flash.now[:error] = 'Error!'
render 'new'
end
end
因此,您可以看到,當前登錄失敗后,用戶將被重定向到登錄頁面上的新表單,在那里他可以嘗試再次登錄。 我呈現的錯誤消息通常顯示在此處:
<%= render 'errors/login', object: f.object %>
如果我將該消息放入對話框中,則在打開網站后立即顯示以下錯誤:
undefined method `errors' for nil:NilClass
可能是因為會話仍然“不可見”。 如果從SessionsController中刪除未成功登錄的render 'new'
,則會收到以下錯誤:
Missing template sessions/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in: * "/Users/username/Applications/AppName/app/views"
因此,如果用戶輸入錯誤的用戶名/密碼並在表格上方顯示短信,我只想保留彈出的對話框窗口。 做到這一點的最佳方法是什么? 謝謝 :)
您有2(3?)個問題:
nil:NilClass
nil:NilClass的未定義方法“錯誤”
我想這個錯誤是由您錯誤地傳遞/調用表單對象引起的
您當前正在傳遞object: f.object
,我可以這樣做:
<%= render 'errors/login', object: f, as: "form" %>
這將傳遞表單構建器對象,並在部分視圖中將其稱為“表單”。 然后,您可以像這樣調用表單對象:
#app/views/errors/login.html.erb
<%= form.errors.each do |error| %>
//errors
<% end %>
模板
缺少模板會話/創建,使用{:locale => [:en] 、: formats => [:html] 、: handlers => [:erb,:builder,:raw,:ruby,:jbuilder,咖啡]}。 在以下位置搜索:*“ /用戶/用戶名/應用程序/ AppName / app / views”
這意味着您正在調用一個不存在的文件
具體來說,您需要在此處擁有一個文件:
#app/views/errors/login.html.erb
<%= your_code_here %>
不成功
導致對話出現的問題更多的是JS問題,而不是HTML / Rails問題。
我肯定會看一下渲染一個.js.erb
,因為這將允許您動態加載頁面上的對話元素
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.