【问题标题】:Is it possible to pass values to the params hash without putting the properties in a form in Rails 4?是否可以将值传递给 params 哈希而不将属性放在 Rails 4 中的表单中?
【发布时间】:2015-10-29 23:40:31
【问题描述】:

所以我想在用户在 Rails 视图中提交表单后将值传递给 Rails 控制器方法。我希望 params 哈希结构为:

{:user => {:username=>"some name" }, :title => "My Title"}

为此,我在表单元素之外使用了一个 hidden_​​field_tag。生成的 html 如下所示:

<input type="hidden" name="title" id="title" value="My Title" />


<%= form_for @user, :as => :user, :url => sign_in_path(@user) do |f| %>
  <%= f.input :username %>
   #usual form field stuff

然而,当我检查 params 哈希时,我只在里面找到 :username 键和值对。这是否意味着标题必须通过“f.title”语法成为表单的一部分?如果可能,我不想这样做,因为 title 不是 User 模型的一部分。这是一个单独的属性,我想将其用于控制​​器内部的其他内容。

【问题讨论】:

  • 您需要将hidden_field_tag 放在form 中,并在控制器中使用params[:title] 访问它

标签: ruby-on-rails ruby


【解决方案1】:

是的,标题必须是表单的一部分才能连同它一起提交。

如果您不想在 User 模型中使用 title 参数,则应使用 Rails 4 强参数。

class UsersController < ActionController::Base

  # your actions here

  private

  def person_params
    # don't permit the title paramter here.
    params.require(:user).permit(:username)
  end
end

【讨论】:

    【解决方案2】:

    您应该在表单中包含隐藏字段以使其包含在内:

    <%= form_for @user, ... do |f| %>
      <%= hidden_field_tag :title, 'My Title' %>
      <%= f.input :username %>
      # And so on...
    

    您还应该按照建议使用强参数,就像一般的最佳实践一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      相关资源
      最近更新 更多