允许用户使用act-as-taggable-on

时间:2015-10-12 10:52:37

标签: ruby-on-rails devise acts-as-taggable-on

是否有办法允许用户在使用设计注册时从预定义标签中进行选择?

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

这是我到目前为止注册页面的内容。我需要做什么,以便当用户填写电子邮件,密码并检查必要的标签和点击注册时,为该用户保存标签?非常感谢你们的帮助。感谢

1 个答案:

答案 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