Devise 및 CanCan을 사용하여 사용자 역할을 처리하기 위해 Rails 3 앱을 설정하려고합니다.체크 박스가 다용도 역할을하지는 않지만 퍼팅 중입니다.
class User < ActiveRecord::Base
has_many :users_roles
has_many :roles, :through => :users_roles
end
class Role < ActiveRecord::Base
has_many :users_roles
has_many :users, :through => :users_roles
end
class UsersRole < ActiveRecord::Base
belongs_to :user
belongs_to :role
end
사실 모든 것이 작동 벌금을 다음과 같이
나의 관계이다. Devise가 인증을 완벽하게 처리하고 있습니다. CanCan은 ability.rb를 기반으로 한 사용자 행동을 제한합니다.
하지만 UsersRole을 설정하는 데는 어리석은 문제가 있습니다.
사용자 편집 페이지에서 확인란을 정의했습니다.
<% for role in Role.all %>
<%= check_box_tag "user[role_ids][]", role.id, @user.roles.include?(role) %>
<%=h role.name.camelize %>
<% end %>
<%= hidden_field_tag "user[role_ids][]", "" %>
콘솔을 통해 UserRole을 생성하면이 확인란이 사용자 역할에 따라 선택됩니다.
하지만이 확인란을 사용하여 역할을 설정하거나 변경할 수 없습니다!
HABTM 및 roles_mask 방식으로 전환 된 구문 변형, 내 모델과 컨트롤러를 여러 번 재구성하여 효과가 전혀 없었습니다.
사실은 내 질문의 제목은 완전히 정확하지 않습니다 - 체크 박스는_method put
authenticity_token XGl6s1iyXJfahdgftc3df8q1ZeehMVzs3LxiQH98jGw=
commit Update
user[current_password] password
user[email] [email protected]
user[name] User Name
user[password]
user[password_confirmatio...
user[role_ids][] 1
user[role_ids][] 4
user[role_ids][]
utf8 ✓
를 가하고 있습니다하지만이 값은 데이터베이스에 설정되지 않습니다.
내가 뭘 잘못하고 있는거야 ?? ?? 그가 당신의 컨트롤러에 update_attributes 호출과 결합되어있는 경우
당신은 절대적으로 정확! 간과하는 것은 항상 작은 것들입니다. role_ids를 attr_accesible로 지정했는데 모든 것이 작동합니다. 이제 컨트롤러를 구현하려고합니다. before_save라고 부르시겠습니까? –
좋습니다. 컨트롤러에서 처리하는 방법에 대한 제안을했습니다. – DanneManne
정확한 코드가 있지만 뷰가 렌더링되지 않고 메시지가 있습니다. FalseClass에 대한 정의되지 않은 메서드 인 'first'. 무슨 문제인지 알려주세요. – amj