将参数传递给link_to rails 2

时间:2011-06-21 19:23:12

标签: ruby-on-rails ruby forms post

我写了以下表格:

<% 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. param [:login] [:login]未发送....
  3. 我可以在这做什么?

    谢谢!

    我通过在用户点击“忘记密码”链接后添加带有新表单的新视图解决了我的问题。 EASIEST和CLEANEST解决方案。

2 个答案:

答案 0 :(得分:1)

基本上 -

您点击了链接,该链接未提交您创建的表单,但“提交”按钮可以提交。

当您点击链接时,这是发送GET请求。如果您想发送带有表单数据的帖子请求,您可以使用javascript事件监听器点击链接提交表单。

由于表单未提交,您登录[login]为nil。

要使用javascript提交表单,您将使用jquery -

执行此类操作
$(".linkClass").click(function(event){
    event.preventDefault(); //This will stop get request.

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

答案 1 :(得分:1)

在您的示例代码中,登录值实际上是空的:

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

另外 - “post =&gt; 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]是空白的。它应该呈现“忘记密码?在这里输入您的登录名”页面。