2016-11-02 5 views
-1

上many2many関係私はstuckedだRailsの5マス編集(破棄/作成)Railsの

にこのタスクを実行する方法で、私はProjectとの関係「質量」を編集する必要があり、それはMembers

です

UIで、特定のメンバーリスト(Userのリスト)を持つポップアップを開き、そのメンバーがProjectに属しているかどうかを確認します(ここでの関係を確認してください)。

私は、チェックボックスを使って他の人(所属していない人)にマークを付けることができますし、フォームを "保存"して関係を作成/削除することができます。私はこのモデル

// project.rb 

class Project < ApplicationRecord 
    has_many :memberships, dependent: :destroy, class_name: 'ProjectMember' 
    has_many :members, through: :memberships, class_name: 'User', source: :user 
end 


// project_member.rb 

class ProjectMember < ApplicationRecord 
    belongs_to :user 
    belongs_to :project 
end 

// user.rb 
class User < ApplicationRecord 
    has_many :project_members 
    has_many :projects, through: :project_members 
end 

私はRailsの上でちょっと新しいだと私は本当に(SimpleFormsを使用して)フォームを作成する方法にstuckedとどのように関係を編集するよを持つレコードの

正しいアプローチは何ですか?私は成功せず、ウェブ上で見つけることを試みた:(

私は私の質問を願っています、それは十分に明らかだ:)

答えて

0

私はあなたが欲しいヘルパーが宝石の繭に含まれていると思う:この宝石を使用してhttps://github.com/nathanvda/cocoon

、プロジェクトの版のためのあなたのビューは、次のようになります。

プロジェクト/ _form

= simple_form_for @project do |f| 
    -# your project fields... 
    %h3 Members 
    #members 
    = f.simple_fields_for :members do |member| 
     = render 'member_fields', f: member 
    .links 
     = link_to_add_association 'add member', f, :members 
    = f.submit 

プロジェクト/ _member_fields

.nested-fields 
    = f.association :user 
    = link_to_remove_association "remove user from project", f 

編集:私は、ビューの部分に焦点を当てたが、その前に、モデルでは、あなたがフォームからネストされた属性を受け入れなければならない:

class Project < ApplicationRecord 
    has_many :memberships, dependent: :destroy, class_name: 'ProjectMember' 
    has_many :members, through: :memberships, class_name: 'User', source: :user 
    accepts_nested_attributes_for :members, reject_if: :all_blank, allow_destroy: true 
end 

やるべき仕事のビットもありますネストされた属性を許可するようにコントローラ内に設定します。

def project_params 
    params.require(:project).permit(:name, :description, members_attributes: [:id, :user_id, :_destroy]) 
end 
+0

uhmmですが、チェックボックスと保存ボタンを備えたユーザーのリスト全体が必要です。 – juan

+0

メンバーシップモデルにブール値フィールドis_memberを追加すると、これは上記と互換性があります。しかし、プロジェクトが保存されるとすぐにメンバーシップを作成する必要があります。これはちょっと複雑です –

関連する問題