Also, watch your console as you update, and see if there's a warning about 
illegal attributes not being saved.

Walter

On Nov 18, 2013, at 4:04 PM, Walter Lee Davis wrote:

> Aha. You have a method called roles, but you're storing this in roles_mask? 
> Which is a string? You should try adding roles_mask in the strong parameters, 
> I think.
> 
> Walter
> 
> 
> On Nov 18, 2013, at 3:50 PM, Phillip wrote:
> 
>> 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.
> 
> -- 
> 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/06C8EADD-E307-4517-A2C3-E53FA54172B2%40wdstudio.com.
> For more options, visit https://groups.google.com/groups/opt_out.

-- 
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/9683A8E3-4CE7-4996-870F-F54D4595FA99%40wdstudio.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to