ビューでform_forに入力されたものをコントローラで取得して保存したいのですが、うまくいきません。
コントローラの.saveの段階でエラーです。
エラーは,
undefined method `name' for #<GroupsUser:0x00007fac9f7c9ae0>
です。
ビューのフォームは
=form_for @group, class: "groupNew__form" do |f| = f.text_field :name, class: "groupNew__form__name" = f.collection_check_boxes :user_ids, @users, :id, :name = f.submit "Send"
コントローラは
class GroupsController < ApplicationController def new @group = Group.new @users = User.all end def create g = Group.new(group_params) g.save end private def group_params params.require(:group).permit(:name, user_ids: []) end end
です。
マイグレーションファイルは
class CreateGroups < ActiveRecord::Migration[5.0] def change create_table :groups do |t| t.string :name, null: false t.timestamps end end end
ちなみに関連あるモデルは
class Group < ApplicationRecord has_many :groups_users has_many :users, through: :groups_users has_many :messages validates :name, presence: true, uniqueness: true end
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :messages has_many :groups_users has_many :groups, through: :groups_users end
class GroupsUser < ApplicationRecord belongs_to :group belongs_to :user validates :name, presence: true, uniqueness: true end
少なくともnameは間違えていないように思えるのですが、わかるかたいらっしゃいますでしょうか?
ちなみに.save前にbinding.pryをかませてインスタンス生成の値とそのsaveの値を見ると以下です。
6: def create 7: g = Group.new(group_params) 8: binding.pry => 9: g.save 10: end [1] pry(#<GroupsController>)> g => #<Group:0x00007fee578cbbd8 id: nil, name: "df", created_at: nil, updated_at: nil> [2] pry(#<GroupsController>)> g.save (0.3ms) BEGIN (0.3ms) ROLLBACK NoMethodError: undefined method `name' for #<GroupsUser:0x00007fee5ef57770> from /Users/handaryouhei/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activemodel-5.0.7.2/lib/active_model/attribute_methods.rb:433:in `method_missing'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。