У меня есть форма с вложенными атрибутами, которую мне нужно разместить на многих разных страницах. Не обязательно к той модели, к которой он принадлежит. Итак, у меня есть эта форма на странице шоу батальонов. Информация о пользователе создается нормально, но у пользователя есть_many ролей, и эти атрибуты не создаются. У меня есть много других вложенных форм, которые работают нормально, я не могу понять, чего мне не хватает, чтобы эта работа работала.
class User < ActiveRecord::Base
has_many :roles
accepts_nested_attributes_for :roles, :allow_destroy => true
def active?
active
end
def activate!(params)
self.active = 1
self.login = params[:user][:login]
self.password = params[:user][:password]
self.password_confirmation = params[:user][:password_confirmation]
save
end
def deliver_activation_instructions!
reset_perishable_token!
NotifierMailer.deliver_activation_instructions(self)
end
def deliver_activation_confirmation!
reset_perishable_token!
NotifierMailer.deliver_activation_confirmation(self)
end
def has_no_credentials?
self.crypted_password.blank?
end
def signup!(params)
self.login = params[:user][:login]
self.email = params[:user][:email]
self.name = params[:user][:name]
self.position = params[:user][:position]
self.battalion_id = params[:user][:battalion_id]
self.company_id = params[:user][:company_id]
self.platoon_id = params[:user][:platoon_id]
save_without_session_maintenance
end
end
class Role < ActiveRecord::Base
belongs_to :user
end
<% form_for :user, @user, :url => users_path do |f| %>
<%= f.error_messages %>
<% f.fields_for :roles do |f| %>
<%= render :partial => "role", :locals => { :f => f, :role => 'battalion'} %>
<% end %>
<%= render :partial => "form", :locals => { :f => f, :position => 'Battalion Commander', :company => 'nil'} %>
<%= f.submit "Register" %>
<% end %>
_role.html.erb
<%= f.hidden_field(:name, :value => role) %>
_form.html.erb
<%= f.hidden_field(:position, :value => position) %>
<%= f.hidden_field(:battalion_id, :value => @battalion.id) %>
<%= f.hidden_field(:company_id, :value => company) %>
<%= f.label(:name, "Name:") %>
<%= f.text_field :name%>
<br />
<%= f.label(:email, "E-Mail:") %>
<%= f.text_field :email%>
<br />
Вот что происходит, когда я создаю пользователя:
Обработка UsersController # create (для 127.0.0.1, 14.02.2010 22:15:16) [POST] Параметры: {"user" => {"name" => "Chirs", "roles" => {"name "=>" батальон "}," company_id "=>" nil "," position "=>" Командир батальона "," email "=>" [email protected] "," battalion_id "=>" 1 "}, "commit" => "Зарегистрироваться", "action" => "create", "Authentity_token" => "PcGbsQNG7wKKPDZTM + JGry / a1aBWZuoyaCNwlqlCJ0g =", "controller" => "users"}
Я просто не запускаю действие create для ролей.
Кажется, что это должно быть довольно просто, я предполагаю, что удаление этого от пользовательской модели создает проблему. Если это будет form_for @battalions, а затем сделать User nested и Role вложенным, это будет три уровня, и это просто не кажется правильным.
Любая помощь будет принята с благодарностью.