質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

264閲覧

Railsで多対多のモデルを追加できるようにしたい

rails1

総合スコア18

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/03/07 00:10

編集2019/03/07 00:11

閲覧いただきまして、誠にありがとうございます。

Railsでクラウドファンディングのようなサービスを作成しています。
現在、エラーが出ているのは、クラウドファンディングのプロジェクト(Projectモデル)に参画しているユーザーを既に登録しているユーザー(Userモデル)の中から検索して複数追加するという機能を実装している際です。

undefined local variable or method `m' for

こちらにありますQiita記事を参考に進めていたのですが、エラーおよび構造上理解が追いついておらず、エラーを解消することができずにいます。
https://qiita.com/shizuma/items/5bfcf6c1e855b959e135

すみませんが、どなたかおたすけくださいませ。

Projectモデル(app/models/project.rb)

Ruby

1class Project < ApplicationRecord 2 has_many :users, through: :user_projects 3 has_many :user_projects 4 accepts_nested_attributes_for :user_projects, allow_destroy: true 5end

Userモデル(app/models/user.rb)

Ruby

1Class User < ApplicationRecord 2 has_many :projects, through: :user_projects 3 has_many :user_projects 4end

中間テーブル(app/models/user_project.rb)

Ruby

1class UserProject < ApplicationRecord 2 belongs_to :user 3 belongs_to :project 4end

Projectコントローラー(app/controllers/project_controllers.rb)

Ruby

1・・・ 2 def new 3 @project = Project.new 4 @project.user_projects.build 5 end 6 7 8 def create 9 @project = Project.create(create_params) 10 if @project.save 11 flash[:success] = "新しくプロジェクトが追加されました!" 12 redirect_to @project 13 else 14 flash[:alert] = "プロジェクトの追加に失敗しました。" 15 redirect_to new_project_path 16 end 17 end 18・・・ 19 private 20 21 def create_params 22 params.require(:project).permit(:id, :name, user_projects_attributes: [:user_id, :project_id]) 23 end

プロジェクト作成画面(app/views/projects/new.html.erb)

Ruby

1<section class="form"> 2 <div class="mainContainer"> 3 <h2>プロジェクトの新規作成</h2> 4 <%= form_for(@project) do |f| %> 5 <div class="formItem"> 6 <h3>メンバー追加</h3> 7 <%= f.fields_for :user_projects, id: "add_member_#{m.index}", class: "js-team_member" do |m| %> 8 <%= m.collection_select :user_id, User.all, :id, :name %> 9 <span class="member_delete" id="#{m.index}">Delete</span> 10 <p id="add_item_button">追加する</p> 11 <% end %> 12 </div> 13 <% end %> 14 </div> 15</section> 16 17<script> 18 var member_num = $(".js-project_member").length; 19 $("#add_item_button").on("click", function() { 20 var input = 21 '<div class="js-project_member" id="add_member_' + 22 member_num + 23 '">' + 24 '<select name="project[category_id]" id="project_category_id">' + 25 '<span class="member_delete" data-id="' + 26 member_num + 27 '">' + 28 "Delete" + 29 "</span>" + 30 "</div>"; 31 $("#project_members_box").append(input); 32 member_num++; 33 }); 34</script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

この部分ですね、 m が有効になるのはブロックの中なので、ブロックの外で m.index しているID指定を外せば動くと思います

erb

1<%= f.fields_for :user_projects, id: "add_member_#{m.index}", class: "js-team_member" do |m| %>

投稿2019/03/07 00:36

Ighrs

総合スコア656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rails1

2019/03/07 02:32

ありがとうございます。まさしく初歩的なところでした。 その後、Cocoonを導入したらなんとか紐づくものを複数追加することまではできました。 わざわざ、ご回答いただきまして感謝します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問