簡體   English   中英

表單提交失敗后,在對話框中顯示錯誤消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM