Я бы порекомендовал использовать fields_for
для этого:
<%= form_for([@user, :reviews]) do |f| %>
<% @reviews.each do |review| %>
<%= fields_for review do |r| %>
<%= render "reviews/form", :r => r %>
<% end %>
<% end %>
<% end %>
Чтобы это работало, вам нужно построить столько объектов обзора, сколько вам нужно в вашем контроллере:
def new
# you could also have this in a before_filter...
@user = User.find(params[:id])
@reviews = Array.new(3) { @user.reviews.build }
end
Это создаст новые экземпляры записей обзора для этого пользователя, что отличается от новых записей . Экземпляры - это просто объекты Ruby. Теперь, когда вы звонили @user.reviews.build
три раза, вы увидите три отзыва на ваш взгляд.
def create
@user = User.find(params[:id])
@reviews = Review.create(params[:reviews])
# Some more logic for validating the parameters passed in
end
Это создаст три новых Review
объекта и свяжет их с @user
, при условии, что все три действительны.