2017-02-28 25 views
0

複数のユーザーを持つSNSアプリでグループを作成しようとしています。 グループhas_manyからGroups_usersまでのユーザー。Rails:ネストされたフォームで複数の子レコードを作成

ここではグループを作成するフォームがあり、グループにメンバー(Groups_users)を同時に追加したいと考えています。 グループを作成すると同時にグループに1人のメンバーを追加することに成功しましたが、グループに複数のメンバーを追加することはできません。

ここに私のコードだ:

モデル:

group.rb

class Group < ApplicationRecord 
    validates :name, presence: true, uniqueness: true 
    validates :owner_user_id, presence: true 
    has_many :groups_users, inverse_of: :group 
    has_many :users, through: :groups_users 
    accepts_nested_attributes_for :groups_users 
    has_many :group_posts 
end 

groups_user.rb

class GroupsUser < ApplicationRecord 
    belongs_to :group, inverse_of: :groups_users 
    belongs_to :user 
    validates :group, presence: true 
    validates :user_id, presence: true 
end 

コントローラ:

groups_controller.rb

module Users 
    module Users 
    class GroupsController < BaseController 
     def index 
     @group = Group.new 
     @group.groups_users.build 
     @groups = Group.all 
     end 

     def create 
     group = Group.new(group_params) 
     if group.save! 
      redirect_to users_groups_path, notice: 'a new group created!' 
     else 
      redirect_to users_groups_path, notice: 'The selected group name has already been taken.' 
     end 
     end 

     private 

     def group_params 
      params.require(:group).permit(:name, :owner_user_id, groups_users_attributes: [:user_id]) 
     end 
    end 
    end 
end 

再生回数:index.html.slim

グループ/

​​

注:私は削除した場合

  • :ビューファイルから{複数の真}、それが働きました私は同時に複数のメンバーを追加したいと思います。
  • 私はdevise gemを使用していますので、current_userはログインしているユーザーです。
  • mutual_followers:フォローしているユーザー(あなたのUser.rbで定義されていますが、私は質問したくありません)長すぎる)。

私はuser_idの配列を1つのuser_idとして挿入するため、私のコードは機能しませんが、この問題の解決方法はわかりません。

P.S. Nested Simple Form in Rails4 - has many through, save multiple records

しかし、私はsimple_formを使用していないため、私の問題を解決する方法を見つけることができず、form_forでその違いを補う方法を見つけることができませんでした。

答えて

0

この問題を解決する簡単な方法の1つは、nested_form gemを使用することです。 https://github.com/ryanb/nested_form

これを使用すると、次のようにコーディングするだけでnested_formsを追加または削除できます。

<%= f.fields_for :tasks do |task_form| %> 
    <%= task_form.text_field :name %> 
    <%= task_form.link_to_remove "Remove this task" %> 
<% end %> 
<p><%= f.link_to_add "Add a task", :tasks %></p> 

宝石のREADMEはかなりわかりやすいので、それもチェックしてください。

また、宝石が提供するwikiを見ると、好きなようにフォームをカスタマイズする方法を知ることができます。

関連する問題