通过simple_form_for获取更多信息

时间:2018-06-01 19:31:17

标签: ruby-on-rails devise haml simple-form-for

我有:

    = simple_form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post}) do |f|
      = f.error_notification
      .input-row
        = f.input :email, :required => false, :autofocus => true, placeholder: "Enter your email address", :
      .submit-row
        .row
          .col-xs-2
            .cancel
              - if resource_name == :admin
                = link_to "Cancel", new_admin_session_path
              - else
                = link_to "Cancel", new_client_session_path
          .col-xs-10
            = f.submit "Reset Password", :class => "btn btn-primary"

我还有params[:type]我想将其传递到下一页,这是一封生成的电子邮件,位于app / views / accounts_mailer / reset_password_instructions.html.haml(我不知道怎么回事知道那就是它的所在地

问题是:如何在那里获取其他信息,以及如何在那里访问它?

1 个答案:

答案 0 :(得分:0)

由于您的表单正在使用资源助手,我不知道它正在对哪个对象进行操作,我将假设它是用于User对象的。如果没有,你可以随时调整。

在顶部的/user.rb模型文件中添加(请记住使用表单正在处理的任何对象):

attr_accessor :something

在使用表单提供视图的控制器中,您应该这样做:

@something = params[:type]

然后在您的simple_form_for中添加:

= f.hidden_field :something, :value => @something

这会将它传递给处理您表单的控制器,您可以在此处访问它:params[:user][:something]

现在,如果用户永远不会看到此信息并保留在后端,您将跳过添加attr_accessor,跳过在控制器中定义@something,并跳过添加hidden_field你的表格,而是做: 您的控制器中呈现表单的session[:something] = params[:type]。然后你可以在任何控制器中访问它,只需记住没有点击过这个表单的用户就不会定义它。