여러 페이지에 배치해야하는 중첩 된 특성이있는 양식이 있습니다. 반드시 그것이 속한 모델 일 필요는 없습니다. 그래서이 양식은 대대 쇼 페이지에 있습니다. 사용자 정보는 잘 작성되었지만 사용자에게는 has_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 번호 생성 (127.0.0.1 at 2010-02-14 22:15:16) [POST] 매개 변수 : { "user"=> { "name"=> "Chirs", "roles"=> { "name"=> "battalion"}, "company_id"=> "nil", "position"=> "Battalion Commander", "email"=> "[email protected]", "battalion_id"=> "1 "}," "=>"등록 ","행동을 저지 "=>" ","authenticity_token "=>"PcGbsQNG7wKKPDZTM + JGry/a1aBWZuoyaCNwlqlCJ0g = ","컨트롤러 "=>"사용자 "} 단지
I를 만들 역할에 대한 작성 조치를 트리거하지 않습니다.
매우 간단해야합니다. 내 유일한 추측은 문제가되는 사용자 모델에서 벗어났습니다. form_for @battalions이어야하고 사용자 중첩 및 역할 중첩을해야합니다. 즉 3 단계이며 올바르게 보이지 않습니다.
도움을 주시면 감사하겠습니다.
도움 주셔서 감사합니다. accepts_nested_attributes_for : roles, : allow_destroy => 사용자 모델에서 true이면 충분하지 않습니까? 그것은 응용 프로그램에서 다른 중첩 된 양식에있는 것 같습니다. 어디에서 "# {association} _attributes"를 할당해야합니까? 나는 문제가 사용자와 관련이 있다고 생각하지 않는다. 사용자를 올바르게 만들었 기 때문이다. 단지 연관된 역할이 아니기 때문이다. User 모델에서 똑바로 시도해도 똑같은 문제가 있습니다. Authlogic을 사용하여 새 사용자를 만들고 있는데, 그 사용자와 관련이 있는지 궁금합니다. 그것을보고있어 주셔서 감사합니다. – looloobs
한 가지 더 : 새 사용자를 만들면이 일이 일어납니다. 왜이 "역할"=> "# <역할 : 0x19751ac>"이 여기에 있습니까? 처리 UsersController # create (127.0.0에 해당).1 at 2010-02-15 15:30:52) [POST] 매개 변수 : { "user"=> { "name"=> "John Jones", "roles"=> "#", "roles_attributes"=> { "0"=> { "name"=> "대대"}}, "company_id"=> "", "login"=> "jjones2", "platoon_id"=> "", "position => "", "email"=> "[email protected]", "battalion_id"=> ""} "커밋"=> "등록", "액션"=> "생성", "authenticity_token"= > "사용자"} –
looloobs
사용자를 생성 또는 업데이트하고 roles_attributes에 직접 할당 할 관련 역할을 수정하려는 경우 언제든지 role_attributes에 할당 할 수 있습니다. accepts_nested_attributes_for를 사용하면 fields_for를 사용할 때 자동으로 수행됩니다. 렌더링 된 뷰의 소스를 확인하면 입력 이름에 표시됩니다. – EmFi