【问题标题】:additional information through a simple_form_for通过 simple_form_for 附加信息
【发布时间】:2018-06-01 19:31:16
【问题描述】:

我有:

    = 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 中(我不知道怎么知道那是它去了)

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

【问题讨论】:

  • 如果可以显示它,您可以将其添加为表单中的隐藏字段,以便与表单中的所有其他参数一起传递。然后您可以在相应控制器的 params 哈希中访问它。如果您需要在其他地方访问它并且它是特定于用户的,您可以随时将其添加到会话哈希中。
  • 我该怎么做?
  • 我会回答的。

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


【解决方案1】:

由于您的表单正在使用资源助手并且我不知道它作用于什么对象,因此我将假设它用于用户对象。如果没有,您可以随时进行相应调整。

在您的 /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] 在呈现表单的控制器中。然后你可以在任何控制器中访问它,只要记住没有点击这个表单的用户不会定义它。

【讨论】:

  • 我认为我只能访问视图中的信息。此视图似乎没有控制器。我正在使用设计,所以我认为这都是隐藏的魔法......
  • 查看他们关于生成用于定制的设计控制器的文档。 github.com/plataformatec/devise/#configuring-controllers 将来我会建议您跳过设计,因为一旦您开始偏离常规,它就会变得很痛苦。我非常喜欢使用 has_secure_password 进行身份验证并从那里构建。
猜你喜欢
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
相关资源
最近更新 更多