我有一个名为Family
的模型,其中belongs_to :user
我想让用户以/views/families/new.html.erb
的单一形式添加多个家庭成员
编辑:对不起,我早些时候应该提供了更详细的代码
在代码中稍加修改后
# config/routes.rb
resources :families
#app/models/user.rb
class User < ActiveRecord::Base
has_many :families
end
#app/models/family.rb
class Family < ActiveRecord::Base
belongs_to :user
end
#app/controllers/families_controller.rb
class FamiliesController < ActiveRecord::Controller
def new
end
def create
@family = Family.new(family_params)
a = params[:family][:"0"]
@family.user_id = current_user.id
if @family.save
flash[:notice] = params[:family][:"0"]
redirect_to dummy_path
else
flash[:notice] = "didnt happen"
end
end
private
def family_params
params.require(:family).permit(:all)
end
end
#app/views/families/_form.html.erb
<%= form_tag(controller: "families") do %>
<% i = 0 %>
<% 3.times do %>
<br>
<h2>Family Member # <%= i+1 %> : </h2>
<br>
<%= fields_for("family[#{i}]") do |f| %>
<%= f.text_field :name, class: "form-control" , placeholder: "Name"%> <br>
<%= f.text_field :relationship, class: "form-control" , placeholder: "Relationship" %> <br>
<%= f.date_field :dob, class: "form-control" %> <br>
<%= f.text_field :blood_group, class: "form-control", placeholder: "Blood group" %> <br>
<%= f.text_field :email, class: "form-control", placeholder: "Email" %> <br>
<%= f.number_field :phone, class: "form-control", placeholder: "Phone number" %> <br>
<%= f.text_area :hobbies, class: "form-control", placeholder: "Hobbies" %> <br>
<% i=i+1 %>
<% end %>
<hr>
<% end %><br>
<%= submit_tag "Submit", class: "btn btn-primary" %> <br>
<% end %>
最佳答案
您要使用nested forms
。您应该能够复制并粘贴以下代码以开始操作:
应用程序/模型/family.rb
class Family < ActiveRecord::Base
has_many :users
accepts_nested_attributes_for :users
end
应用程序/模型/user.rb
class User < ActiveRecord::Base
belongs_to :family
end
应用程序/ View /家庭/new.html.erb
<%= form_for(@family) do |f| %>
<%= f.fields_for :users do |user| %>
<p>
<%= user.text_field :name %><br>
<%= user.text_field :email %>
</p>
<% end %>
<%= f.submit %>
<% end %>
应用/ Controller /家庭_controller.rb
[...]
def new
@family = Family.new
3.times { @family.users.build }
end
[...]
private
# Use callbacks to share common setup or constraints between actions.
def set_family
@family = Family.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def family_params
params.require(:family).permit(:name, users_attributes: [ :name, :email ])
end
关于ruby-on-rails - 在Rails 4中使用单个表单保存多个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23673513/