Hallo Zusammen,
ich stelle gerade mein kleines Programm von 3.1.0 auf 4.1.1 um und scheiter an der HABTM-Speicherung.
Es ist weder meine erste noch die einzige M:N-Beziehung, unser Rails 2 und 3 liefen sie immer.
Daher gehe ich aktuell davon aus, dass es irgendwie an den Strong-Parameter liegt.
Folgende Tabellen habe ich angelegt:
rundmails: betreff inhalt
users: nick email
rundmails_users. rundmail_id user_id
Die Models haben folgenden Eintrag:
1 2 3
|
has_and_belongs_to_many :users, join_table: :rundmails_users has_and_belongs_to_many :rundmails, join_table: :rundmails_users
|
"join_table: :rundmails_users" wurde bereits aufgrund einiger Einträge hinzugefügt
Im Controller wurde hinzugefügt:
1 2 3 4 5 6 7
|
def rundmail_params params.require(:rundmail).permit(:betreff, :inhalt, :user_ids => []) end def user_params params.require(:user).permit(:nick, :email, :rundmail_ids => []) end
|
Auch hier habe ich die unterschiedlichen Schreibweisen "user_ids: []" ausprobiert.
Der Controller hat folgende create-Funktion:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
def create @user = User.first @user2 = User.find(7) @rundmail = Rundmail.new(rundmail_params) @rundmail.users << @user @rundmail.users << @user2 if @rundmail.save render 'create' else render action: "new" end end
|
Beim Ausführen kommt immer wieder die gleiche Fehlermeldung:
1 2 3 4 5 6 7 8 9 10
|
[1m [35m (0.1ms) [0m BEGIN [1m [36mSQL (0.2ms) [0m [1mINSERT INTO `rundmails` (`betreff`, `created_at`, `inhalt`) VALUES ('nn', '2017-04-16 20:10:18', 'nn') [0m [1m [35mSQL (0.1ms) [0m INSERT INTO `rundmails_users` (`rundmail_id`, `user_id`) VALUES (80, 3) [1m [36mSQL (0.1ms) [0m [1mINSERT INTO `rundmails_users` (`rundmail_id`, `user_id`) VALUES (80, 7) [0m [1m [35m (28.9ms) [0m ROLLBACK Completed 500 Internal Server Error in 85ms
NoMethodError (undefined method `name' for nil:NilClass): app/controllers/rundmails_controller.rb:70:in `create'
|
Ich habe mir inzwischen schon alles mögliche an evtl. Dingen ausgeben lassen, ist valid, hat 2 user usw.
Validierungen sind allesamt auskommentiert, es kann also auch daran nicht liegen.
Gebe ich die 3 Befehle in MySQL (Serverversion 5.5) direkt ein, so ist alles bestens.
Habt Ihr eine Idee? Seh ich den Wald vor lauter Bäumen nicht?