Я новичок в Rails 3 и у меня проблемы с сохранением записей в таблице Join.Я искал и пробовал разные примеры, найденные на этом сайте и из документации или книг, но я не понимаю, почему я не могу заставить его работать.Я пытаюсь создать авторизацию, создавая роли и связывая их с пользователями.До сих пор я пытался назначить роли из действия обновления в контроллере Users без преобладания.
У меня есть 3 модели: User.rb, role.rb и assignment.rb (таблица соединений)
class User < ActiveRecord::Base
has_many :assignments, :dependent => :destroy
has_many :roles, :through => :assignments, :foreign_key => :role_id
accepts_nested_attributes_for :roles
attr_accessor :password, :role_ids
attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :status, :description, :username, :roles_attributes
...
end
class Role < ActiveRecord::Base
has_many :assignments
has_many :users, :through => :assignments, :foreign_key => :user_id
accepts_nested_attributes_for :users
attr_accessible :name
end
class Assignment < ActiveRecord::Base
belongs_to :user
belongs_to :role
accepts_nested_attributes_for :roles
end
Контроллер пользователей в действии обновления У меня есть следующие
class UsersController < ApplicationController
...
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
@user.roles.build
flash[:success] = "Profile updated"
redirect_to @user
else
@title = "Edit" + " " + @user.username
render 'edit'
end
end
...
end
и на странице просмотра «Изменить» я хочу установить флажки для обновления записи пользователя с соответствующей ролью:
РЕДАКТИРОВАТЬ: Изменен флажок «check_box»с "check_box_tag" ... флажки появляются правильно, но значения не сохраняются.
<%= form_for(@user) do |f| %>
...
<div class="field">
<%= f.label :roles %><br />
<%= f.fields_for :role_ids do |r| %>
<% @roles.each do |role| %>
<%= check_box_tag "user[roles][]", role.id, @user.roles.include?(role.id) %>
<%= role.name %>
<% end %>
<%= hidden_field_tag "user[roles][]", "" %>
<% end %>
</div>
<% end %>
С этим кодом я даже получаю сообщение об ошибке, когда «Роли» не связаны.
РЕДАКТИРОВАТЬ: это было исправлено с accepts_nested_attributes_for :role
.Спасибо!
Не найдено связи для имени `role '.Это уже определено?
Я действительно смущен, когда делаю что-то не так.Ваша помощь будет высоко ценится.
Aurelien