要写关于嵌套表单的内容,然后我新开了一个项目测试嵌套表单…… 弄了一天也没弄成,所以来求助了 (┬_┬)
就是一对多的关系,在 1 方的表单内嵌套多方的表单😢 网上的资料都不太对或者不太全 看的似懂非懂怎么写都有点错
注释的部分是不知道要不要的,有说要写的有说內建的
class User < ActiveRecord::Base
has_many :books
accepts_nested_attributes_for :books
# def books
# [@book1, @book2]
# end
# def books_attributes=(book_attributes)
# # book_attributes.each do |attributes|
# # books.build(attributes)
# # end
# end
end
class Book < ActiveRecord::Base
belongs_to :user
end
User 只有一个 username 的属性,book 只有一个 name 的属性
然后 erb 文件是这么写的
<h1>User new</h1>
<%= form_for @user do |f| %>
<%= f.label :username %>
<%= f.text_field :username %>
<% for book in @user.books %>
<%= f.fields_for :books_attributes, book do |ff| %>
<%= ff.label :name %>
<%= ff.text_field :name %>
<% end %>
<% end %>
<%= f.submit '提交' %>
<% end %>
最后是 UserController
class UsersController < ApplicationController
def new
@user = User.new
2.times {@user.books.build}
end
def create
@user = User.new(user_params)
@user.save
redirect_to root_url
end
private
def user_params
params.require(:user).permit(:username, books_attributes: [:name])
# params.require(:user).permit!
end
end
然后出的错误是这样的
求指导,感激不尽😘
折磨我一天各种尝试的问题解决辣<( ̄▽ ̄)> 在@watraludru 的提醒下修改成数组参数
所以最后是这么改的
<% for book in @user.books %>
<%= f.fields_for 'books_attributes[]', book do |ff| %>
<%= ff.label :name %>
<%= ff.text_field :name %>
<% end %>
<% end %>
其实一开始试过这种方案但是可能其它地方有错所以也没成功 而且查看 html 源码的时候有空的 [] 有点奇怪就又改掉了
user[books_attributes][][name]
<form class="new_user" id="new_user" action="/users" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="TqZUuCNqr06D36t7venGAdRWkpbT4ItUUOixcSWvBqudKbiy5aNB6S184eeODUs7m1yr55PWuuAFCK7GqGMN9A==" />
<label for="user_username">Username</label>
<input type="text" name="user[username]" id="user_username" />
<label for="user_books_attributes__name">Name</label>
<input type="text" name="user[books_attributes][][name]" id="user_books_attributes__name" />
<label for="user_books_attributes__name">Name</label>
<input type="text" name="user[books_attributes][][name]" id="user_books_attributes__name" />
<input type="submit" name="commit" value="提交" />
</form>