Ruby on rails 是否可以将值传递给params散列,而不将属性放入Rails 4中的表单中?

Ruby on rails 是否可以将值传递给params散列,而不将属性放入Rails 4中的表单中?,ruby-on-rails,ruby,Ruby On Rails,Ruby,因此,我想在用户在rails视图中提交表单后将值传递给rails控制器方法。我希望参数散列的结构如下: {:user=>{:username=>“某个名字”},:title=>“我的标题”} 为此,我在表单元素外部使用了一个隐藏的\字段\标记。生成的html如下所示: <input type="hidden" name="title" id="title" value="My Title" /> <%= form_for @user, :as => :user, :u

因此,我想在用户在rails视图中提交表单后将值传递给rails控制器方法。我希望参数散列的结构如下:

{:user=>{:username=>“某个名字”},:title=>“我的标题”}

为此,我在表单元素外部使用了一个隐藏的\字段\标记。生成的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

:user,:url=>sign_in_path(@user)do | f |%>
#常用表单字段内容

然而,当我检查params散列时,我只在其中找到:username键和值对。这是否意味着标题必须通过“f.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
class UsersController
您应该在表单中包含隐藏字段,以便将其包括在内:

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

#等等。。。

您还应该按照建议使用强参数,这是一种一般的最佳做法。

您需要将
隐藏字段标记
放在
表单中
并在控制器中使用
参数[:title]