【发布时间】:2016-01-07 21:25:15
【问题描述】:
我有一个模型User,其字符串属性为:location。我正在尝试为它创建一个从选项字段中选择的选项。
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<select name="user[location]" form="user[location]">
<option value="Earth">Earth</option>
<option value="Mars">Mars</option>
<option value="Jupiter">Jupiter</option>
</select>
<%= f.submit "Sign up" %>
<% end %>
但是当我提交表单时,User.last.location 是nil。如果我使用 Rails f.select,我可以让它工作:
<%= f.select :location, options_for_select([['Earth'], ['Mars'], ['Jupiter']]) %>
为什么我的 html 表单不起作用?
User 是 Devise 生成的模型。这是我的应用程序控制器:
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :location
end
end
控制器动作直接内置在 gem 文件中,因此控制器派生自 here.
【问题讨论】:
-
是所选位置没有持续存在于您的用户模型上的问题吗?表格的其余部分是什么样的?表单会转到哪个端点,该控制器操作是什么样的?
-
表单的 HTML 代码是什么?
-
@yez 是的,它不会持续存在。我发布了完整的表格,并澄清了控制器。不过,我不确定您所说的端点是什么意思。
-
@arcyqwerty 我发布了完整的表格。
-
你的选择框的名字是
location,而应该是user[location]试试。
标签: html ruby-on-rails forms select devise