是否有办法允许用户在使用设计注册时从预定义标签中进行选择?
registrations / new.html.erb
<h2>Sign up</h2>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="field">
<%= f.label :email %>
<%= f.email_field :email, autofocus: true %>
</div>
<div class="field">
<%= f.label :password %>
<%= f.password_field :password, autocomplete: "off" %></br >
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em>
<% end %>
</div>
<div class="field">
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, autocomplete: "off" %>
</div>
</div>
<% tag_cloud User.tag_counts_on(:tags).order("name ASC"), %w[s m l] do |tag, css_class| %>
<label class="category-select">
<%= check_box_tag 'tag[]', (tag.name), false, class: 'tag-color' %>
<span class="tag-name"><%= tag.name %></span>
</label>
<div class="actions">
<%= f.submit "Sign up" %>
</div>
<% end %>
<%= render "devise/shared/links" %>
application_controller.rb
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :tag_list, :tag, :context_list, :context) }
end
user.rb
acts_as_taggable_on :tags, :context
这是我到目前为止注册页面的内容。我需要做什么,以便当用户填写电子邮件,密码并检查必要的标签和点击注册时,为该用户保存标签?非常感谢你们的帮助。感谢
答案 0 :(得分:0)
tag_list必须是一个数组。正如doc所说:
数组不是强参数允许的标量之一,所以我们 需要配置Devise。
在你的情况下,它会是这样的:
def configure_devise_params
devise_parameter_sanitizer.for(:sign_up) do |u|
u.permit(:email, :password, :password_confirmation, {:context_list => []}, {:tag_list => []})
end
end
我认为您不需要tag
以及tag_list
。 act-as-taggable只发送tag_list。迁移查找this问题有用。
更新
def configure_devise_params
result = devise_parameter_sanitizer.for(:sign_up) do |u|
u.permit(:email, :password, :password_confirmation, {:tag_list => []})
end
result[:tag_list] = result[:tag_list].join(', ')
result
end