我试图以简单的形式接受电话号码,而我似乎无法将变量传递给控制器。我到目前为止的代码是:
在/users/new.erb上查看:
<%= form_for @user do |f| %>
<%= field_set_tag do %>
<p><%= f.label :phone %><br>
<%= f.text_field :phone%>
<%= f.submit "Submit" %>
<% end %>
<% end %>
在控制器中我有:
def new
@user = User.new
end
def create
@user = User.new(params[:new])
phone = @user.phone
end
非常感谢任何帮助。感谢。
答案 0 :(得分:2)
您的代码存在一些问题。当你写:
<%= form_for @user %>
所有表单字段都以散列的形式发送到控制器,以“user”作为根。就像
{"user": {"phone": "ENTERED PHONE NUMBER"}}
要访问控制器中的这些字段,您需要使用以下方法:
@phone_number = params[:user][:phone]
更重要的事情
出于安全考虑,rails确实使用了强参数。这意味着您不能直接在Active Model中使用表单参数进行质量分配,如下所示:
@user = User.new(params[:user])
您需要明确允许所有字段进行质量分配。这可以通过以下方式实现。
def create
@user = User.new(params_user)
@user.save
end
private
def params_user
params.require(:user).permit(:phone)
end
答案 1 :(得分:0)
params[:new]
只是将参数:new
传递给您的@user
对象,但没有params[:new]
参数,因为它未在您的表单中定义。 params[:phone]
应该传递给&#39; @ user&#39;如果您想要提交所有可用的参数,请使用params。
尝试
@user = User.new(params) #instead of @user = User.new(params[:new])
@user.phone