2010-02-14 4 views
1

* Примечание для просмотра всего кода, перейдите по ссылкеВозможно ли взаимодействие с таблицей соединений с действием формы?

Я создаю новые «учетные записи». Каждая новая учетная запись has_many: пользователи. Пользователи have_and_belong_to_many роли. Я пытаюсь назначить ОСНОВНЫЕ роли новым пользователям в новой форме учетной записи. Как правило, простой процесс ...

Связь has_and_belong_to_many между пользователями и Ролями подразумевает, что пользователи и роли связаны таблицей соединений. У меня нет модели для работы. Поэтому я не уверен, как это сделать. Я могу создавать новые роли, используя методы, описанные в here (в ответе), но я не знаю, как назначить существующие роли новым пользователям через модель учетной записи.

СКП эквивалент было бы что-то вроде этого: SQL (0.1ms) INSERT INTO "roles_users" ("role_id", "user_id") VALUES (6, 29) Где мне нужно 29 функционировать как идентификатор нового пользователя, созданного в рельсах т.е. Воулс (6, ID)

Текущий код: (создает новую роль)

<% f.fields_for :users do |builder| %> 
<%= render 'user_fields', :f => builder %> 
<p>Login : <%= f.text_field :login %> 
<p>Email : <%= f.text_field :email %> 
<p>Password : <%= f.password_field :password %> 
<p>Confirm Password : <%= f.password_field :password_confirmation %> 
<%= f.hidden_field :account_id, :value => :id %> 


<% f.fields_for :roles do |builder| %> 
    <%= builder.hidden_field :name, :value => 'test' %> 
<% end %> 

Account.rb

has_many :users 
accepts_nested_attributes_for :users 

User.rb

has_and_belongs_to_many :roles 
accepts_nested_attributes_for :roles 

accounts_controller.rb

def new 
    @account = Account.new 
    #builds user and roles in memory 
    1.times do 
     user = @account.users.build 
    1.times { user.roles.build } 
    end 

ответ

1

Проблема в том, что вы используете accepts_nested_fields, когда вы не должны быть. Он используется для создания и уничтожения элементов ссылочной модели из вызывающей модели. Вы хотите управлять ассоциациями, от пользовательской модели, а не от самих ролей.

Вот что должно быть сделано:

  1. удалить accepts_nested_attributes_for :roles из user.rb (по желанию, но рекомендуется)
  2. Присвоить role_ids поле в форме создания нового пользователя.

Этот вид должен проиллюстрировать точку:

<% f.fields_for :users do |builder| %> 
<p>Login : <%= f.text_field :login %> 
<p>Email : <%= f.text_field :email %> 
<p>Password : <%= f.password_field :password %> 
<p>Confirm Password : <%= f.password_field :password_confirmation %> 
<%= f.hidden_field :account_id, :value => :id %> 

<%= f.collection_select :role_ids, Role.all, :id, :name, {}, :multiple => true %> 

<% end %> 

, не меняя ничего другого, Rails будет заполнить модель присоединиться на создание вместо изменения существующих ролей или создание новых.

+0

Могу ли я отправить вам подарочную карту starbucks? Я работаю над этой проблемой весь день. Спасибо! –