その他
    ホーム 技術発信 DoRuby 多対多の関係について

    多対多の関係について

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    海です。

    railsのテーブルの多対多の関係について参考資料がすでに十分だと思いますけど、

    ここで初心者向けにもう一度まとめます。

    ◆多対多の関係というのは

    例えば、管理サイトのアカウントを作成して、そのアカウントは権限機能を持っています。

    持っている権限機能によりアカウントができる操作も異なります。

    アカウントテーブル(account.rb)と権限機能テーブル(function.rb)は多対多の関係です。

    多対多の関係では、上記図のように結びついているように扱えますが、実際には結合テーブル(account_functions)が必要になります。

    ◆多対多の関係の使用について

    モデル:

    account.rbには has_and_belongs_to_many :funtions

    function.rbには has_and_belongs_to_many :accounts

    また、account.rbには下記のように追加

      def chang_functions(selected_functions)
        function_ids = selected_functions.keys.collect {|key| key.to_i}
        self.functions = Function.find(function_ids)
      end

    コントローラ:

    二郎というアカウントを作成するとき、下記のように使用すれば、

    二郎のデータをaccountsテーブルに挿入される同時、

    二郎が持っている3つ権限機能もaccount_functionsテーブルに挿入されます。

    @account= Account.new(params[:account])

    if @account.save
          @account.chang_functions(params[:functions] || {})
          flash[:notice] = “データが保存しました。”
          redirect_to :action => :index
    else
          #エラーがある場合

             :
    end

    簡単な説明ですが、ご参考になれれば。。。。。。。。…