Hi Walter,

Thanks for reply.

Yes I have added in roles, but perhaps I am doing it wrong? Here is my 
users controller for creating and updating...


def create
    @user = User.new(params[:user].permit(:email, :password, :roles))
    # authorize! :manage, @users

    respond_to do |format|
      if @user.save
        format.html { redirect_to(@user, :notice => 'User was successfully 
created.') }
        format.xml  { render :xml => @user, :status => :created, :location 
=> @user }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @user.errors, :status => 
:unprocessable_entity }
      end
    end
  end

  # PUT /users/1
  # PUT /users/1.xml
  def update
    @user = User.find(params[:id])

    respond_to do |format|
      if @user.update(params[:user].permit(:email, :password, :roles))
        format.html { redirect_to(@user, :notice => 'User was successfully 
updated.') }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @user.errors, :status => 
:unprocessable_entity }
      end
    end
  end



On Monday, November 18, 2013 7:03:09 PM UTC, Phillip wrote:
>
> Hi,
>
> (Using Rails 4.0.1, Ruby 1.9.3, latest devise and cancan gems. sqlite db 
> for local development)
>
> I am a rookie, setting up website and was adding roles(using cancan gem) 
> to my users table. Everything works great, except when I select a role for 
> a user it is not getting saved. The user gets saved/created OK but it never 
> updates/ remembers any roles assigned to the user.
>
> I was following the advice given here(Many roles per user). Any help or 
> advice is most appreciated...
>
> https://github.com/ryanb/cancan/wiki/role-based-authorization
>
> Here is my users form...
>
> <%= form_for(@user) do |f| %>
> <div class="field">
>     <%= f.label :email %><br />
>     <%= f.text_field :email %>
>   </div>
>   <% if @current_method == "new" %>
>     <div class="field">
>       <%= f.label :password %><br />
>       <%= f.password_field :password %>
>     </div>
>     <div class="field">
>       <%= f.label :password_confirmation %><br />
>       <%= f.password_field :password_confirmation %>
>     </div>
>   <% end %>
>   <% for role in User::ROLES %>
>     <%= check_box_tag "user[roles][#{role}]", role, 
> @user.roles.include?(role), {:name => "user[roles][]"}%>
>     <%= label_tag "user_roles_#{role}", role.humanize %><br />
>   <% end %>
>   <%= hidden_field_tag "user[roles][]", "" %>
>   <div class="actions">
>     <%= f.submit %>
>   </div>
> <% end %>
>
>
>
> # /app/model/user.rb
>
> class User < ActiveRecord::Base
>
>   ROLES = %w[admin blog_author]
>
>   def roles=(roles)
>     self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) 
> }.inject(0, :+)
>   end
>
>   def roles
>     ROLES.reject do |r|
>       ((roles_mask.to_i || 0) & 2**ROLES.index(r)).zero?
>     end
>   end
>
>   def is?(role)
>     roles.include?(role.to_s)
>   end
>
>   # Include default devise modules. Others available are:
>   # :confirmable, :lockable, :timeoutable and :omniauthable
>   devise :database_authenticatable, :registerable, :recoverable, 
> :rememberable, :trackable, :validatable
> end
>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/6b9fed85-e8c9-471d-a2ea-b9d223bf33a1%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to