AdilA
@AdilA
Нравится кодить, изучаю go c echo

Как сделать добавление ролей в rails 4 приложении?

Столкнулся с проблемой, не могу понять, как сделать изменение ролей для пользователей. Нужно чтобы можно было в любой момент поменять роль у юзеров:

Итак, cancan, devise, rails 4 ruby 2.0.

models/user.rb
has_many :users_roles, dependent: :destroy
  has_many :roles, through: :users_roles

models/users_role.rb
belongs_to :user
belongs_to :role

models/role.rb
has_many :users_roles
has_many :users, through: :users_roles

В контроллере указываю:
controllers/users_controller.rb
def edit
        @user = User.find(params[:id])
    end

    def update
        @user =  User.find(params[:id])
        if @user.update(user_params)
            redirect_to @user
        end
    end
private

    def user_params
        params.require(:user).permit(:name, roles_attributes: [ :user_id, :role_id])
    end

И во вьюхе делаю следующую форму:
views/users/edit.html.erb
<%= form_for (@user) do |f| %>
<%= f.label :name %><br />
    <%= f.text_field :name %>
 <%= hidden_field_tag "user[role_ids][]", nil %>
    <% Role.all.each do |role| %>
      <%= check_box_tag "user[role_ids][]", role.id, @user.role_ids.include?(role.id), id: dom_id(role) %>
      <%= label_tag dom_id(role), role.name %><br>
      <% end %>
    <%= f.submit %>
<% end %>


Но не работает, не могу понять как передать атрибуты для создания в базе users_role нужный полей.
  • Вопрос задан
  • 3902 просмотра
Решения вопроса 1
AdilA
@AdilA Автор вопроса
Нравится кодить, изучаю go c echo
а прикол был в том что тупо нужно было добавить вместо params.require(:user).permit(:name, roles_attributes: [ :user_id, :role_id])
вот это
params.require(:user).permit(:name, :role_ids => [])
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы