2012-06-28 50 views
2

我目前正在使用Rails的「Devise」插件來處理登錄/身份驗證。我正在使用非常基本的form_for標籤來處理登錄表單。這裏是代碼:將'記住我'複選框轉到提交

<div class="well-outer splash-signin-block"> 
    <div class="well-inner"> 
    <h2>Sign in</h2> 
    <div> 
     <%= form_for(resource, as: resource_name, url: user_session_path, html: { 
     class: "form-inline" 
     }) do |f| %> 
     <p><%= f.text_field :email, placeholder: "Email", autofocus: true %></p> 
     <p><%= f.password_field :password, placeholder: "Password" %></p> 
     <p> 
      <%= f.submit 'Sign in', class:"btn btn-primary btn-large" %> 
      <%= f.check_box :remember_me, class: "checkbox" %> 
      <%= f.label :remember_me %> 
     </p> 
     <% end %> 
    </div> 
    </div> 
</div> 

但是,我想改變「記住我」複選框到一個按鈕。用戶的體驗是他們可以點擊「登錄」(默認操作),也可以點擊「記住我」來持續登錄。

在幕後,我想通過使用隱藏字段將resource[remember_me]屬性設置爲「1」可以工作。然而,作爲一個鐵軌新手,我不知道如何去編碼。我想它會需要一些JavaScript,這很好,但谷歌搜索只會出現AJAX-Y的東西,我不認爲這是必要的。不過,如果有必要,我不會迴避。

+0

http://stackoverflow.com/questions/461790/multiple-submit-buttons-forms-in-rails – Kulti

回答

2

您將創建一個帶有某個id的按鈕,然後使用javascript綁定到該按鈕的單擊事件。單擊按鈕時,您想要更改隱藏字段的值。如果你使用jQuery,它會是這樣......

$('#id_of_button').click(function() { 
    $('#id_of_hidden_field').val("true"); 
    }); 

然後你只檢查該值在控制器就像你通常會。

如果你不使用jQuery,那就沒有太多的工作,我只是不知道它在我頭頂。順便說一句,這段代碼應該位於資產/ javascript文件夾中的.js文件中。

+0

如何定義隱藏領域?我看到有一個「form.hidden_​​field」助手,但我認爲比簡單地將check_box更改爲hidden_​​field更復雜。對?另外,它肯定是'val(「true」)'或者它可以是'val(「1」)'?這也讓我感到困惑。 – eblume

+1

「我認爲有些東西比簡單地將check_box更改爲hidden_​​field更復雜 - 」不,這幾乎就是你要做的。只要給它:id =>'remember_me_button'或類似的東西。你可以讓val成爲你想要的任何東西,它會像正常一樣以params的形式出現。如果你仍然感到困惑,隨時可以提出更多問題,大約一個月前我是一名新手,所以我知道開始時的感覺。 –

+0

謝謝!好的,在我可以試用這個之前爲你另外購買一個(儘管目前看起來不錯!) - 我在哪裏放這個javascript代碼?作爲一個線索,我正在使用設計,並修改這個特定的頁面我編輯的文件是app/views/devise/sessions/new.html.erb - 我可以放下代碼,比如說app/assets/javascripts /devise.js? (我剛好在使用coffeescript,所以擴展名可能會有所不同。) – eblume