저는 Ruby 2.0과 Rails 4 베타를 사용하여 만든 매우 간단한 디자인을 가지고 있습니다.joins 테이블에서> 1 관련 객체를 생성하기 위해 accepts_nested_attributes_for를 어떻게 사용합니까?
사용자와 그룹이 있습니다. 사용자는 여러 그룹의 구성원이 될 수 있으며 그룹은 여러 사용자를 구성원으로 가질 수 있습니다. 따라서 user_id 및 group_id 만 포함하는 조인 모델 UserGroup이 있습니다. 다음과 같이
class User < ActiveRecord::Base
has_many :user_groups, dependent: destroy
has_many :groups, through: :user_groups
accepts_nested_attributes_for :user_groups, allow_destroy: true
end
class Group < ActiveRecord::Base
has_many :user_groups, dependent: destroy
has_many :users, through: :user_groups
end
class UserGroup < ActiveRecord::Base
belongs_to :user, inverse_of: :user_groups
belongs_to :group, inverse_of: :user_groups
validates :user_id, presence: true
validates :group_id, presence: true
end
나는/업데이트를 생성에 하나의 연결 객체를 생성 보여줄 것 accepts_nested_attributes_for에 대한 물건을 많이 발견했다. 내가 원하는 것은 다중 옵션 선택 상자입니다. 현재 시스템에있는 모든 그룹의 목록에서 여러 개의 선택 항목을 선택할 수 있습니다. 사용자가 회원이되고 싶으면 제출하고 제출하면 모든 user_group 연관이 생성됩니다.
이 기능을 활용하려면 컨트롤러 또는보기에서 필요한 것을 해결할 수 없습니다. 내가 현재 가지고 : 뷰에서
<%= form_for(@user) do |f| %>
<div class="field">
<%= f.label :username %><br />
<%= f.text_field(:username) %>
</div>
<div class="field">
<%= f.label :group_ids, 'Group memberships' %><br />
<%= f.select :group_ids, @groups.collect {|g| [g.name, g.id]}, {}, multiple: true %>
</div>
<% end %>
와 : 내 컨트롤러에서
def create
@user = User.new(user_params)
@user.save
end
def user_params
params.require(:user).permit(:forename, :surname, :email, :group_ids)
end
을 (내가 지금 물론 테스트 아니에요 모든 다른 작업과 함께).
이것은 작동하지 않습니다. 그룹 회원 자격이있는 기존 사용자의 편집 페이지로 이동하면 다중 항목 선택 상자에 올바르게 표시되지만 멤버십을 변경하거나 새 사용자로 설정하면 작동하지 않습니다. 내 사용자 객체는 저장되지만 관련 user_group 객체는 생성되거나 소멸되지 않습니다. 아무도 내가 여기서 잘못하고있는 일과 그것을 작동시키기 위해해야 할 일을 나에게 말할 수 있습니까? 지난 몇 시간 동안 StackOverflow 및 Google을 트래킹하면서 아무데도 보냈습니다 ...