2011-06-21 73 views
2

我寫了下面的形式:傳遞參數的link_to梁2

<% remote_form_for :login, 
     :url => {:controller => :usuarios, :action => :login }, 
     :html => { :multipart => true } do |f| %> 
      <p class="login_field"> 
      Login:<br /> 
      <%= f.text_field 'login' %> 
      </p> 
      <p class="login_field"> 
       Clave:<br /> 
       <%= f.password_field 'clave' %> 
      </p> 
      <br /> 
      <p align ="right"> 
       <%= f.submit 'Ingresar' %> 
      </p> 
      <p class="forgot"> 
       <%= link_to "Olvid&oacute su clave?", { :controller => 'usuarios', :action => 'olvido_contrasena', :login => }, :post => true %> 
      </p> 
      <br /> 
      <p id="error_msg_login"></p> 
<% end %> 

現在,在我的控制,我有:

def olvido_contrasena 
    if request.post?  
     u= Usuario.find_by_login(params[:login][:login]) 
     puts u.email 
     if u and u.enviar_nueva_clave 
     flash[:message] = "Una nueva clave ha sido enviada a su correo electronico." 
     redirect_to :action=>'login' 
     else 
     flash[:warning] = "No se pudo enviar la nueva clave." 
     puts "fail" 
     redirect_to "/admin_main" 
     end 
    end 
    end 

不過,我有兩個問題:

  1. 該操作被稱爲GET(並且它應該是POST)。
  2. 帕拉姆[:登錄] [:登錄]是不是正在發送....

我能做些什麼嗎?

謝謝!

我解決了我的問題,在用戶點擊「忘記密碼」鏈接後,添加新視圖並添加新表單。EASIEST和CLEANEST解決方案。

+0

您不清楚您在第1點提出的問題。 關於第2點檢查登錄輸入字段以檢查它具有的「名稱」字段是什麼。我有問題。 – rtdp

+0

輸入字段的名稱是「登錄[登錄]」... – tiiin4

+0

您是否希望單擊鏈接時提交表單? – Olives

回答

1

基本上 -

您點擊鏈接,不提交您所創建的形式,但「提交」按鈕就可以提交。

當你點擊一個鏈接,這是發送GET請求。如果您想要發送包含表單數據的發佈請求,您可以使用JavaScript事件偵聽器通過點擊鏈接提交表單。

由於未提交表單,因此您將以[無]登錄[登錄]。

使用JavaScript你會做這樣的事情用jQuery提交表單 -

$(".linkClass").click(function(event){ 
    event.preventDefault(); //This will stop get request. 

    $("#formId").submit(); 
}) 
+0

有一種方法可以通過JavaScript獲取登錄輸入元素的值並將其傳遞給「link_to」作爲參數? – tiiin4

+0

編輯答案有它。 – rtdp

1

在您的示例代碼,登錄值實際上是空:

<%= link_to "Olvid&oacute su clave?", { :controller => 'usuarios', :action => 'olvido_contrasena', :login => }, :post => true %> 

而且 - 「後=> true「不是如何使其成爲POST的表單。

通常你會使用button_to(代替的link_to),但因爲你已經是一個表單內(和形式不嵌套),你可以僞造一個帖子中傳遞的查詢字符串參數屬性「_method 「(是的,它開始於一個下劃線)。所以你的例子將成爲:

<%= link_to "Olvid&oacute su clave?", { :controller => 'usuarios', :action => 'olvido_contrasena', :login => @usario.login, "_method" => 'post'} %> 

現在的問題是,這人是不是已經登錄......所以你不能讓他們的「登錄」 - 與上面的鏈接登錄字段不是的一部分鏈接。所以你可能需要添加一些時髦的javascript來更新鏈接字段值,當有人在該字段中鍵入內容時。

...但您的控制器操作應該處理有人尚未輸入任何內容的情況。例如,如果params [:login]爲空。它應該呈現一個「忘記密碼?在這裏輸入你的登錄名」種類的頁面。