Rails 新手来了!我正在尝试创建一个允许用户在一个页面上添加多个预测的表单。(理想情况下,您可以一次输入一整周的预测。)在应用程序中,这两个模型是嵌套的。(您只能通过用户访问预测。)
我根据此响应(也观看了 Railscast #196)广告修改了 Forecast 表单和控制器,而表单现在将构建我需要的任何 # 个 Forecast 对象,它只保存最后一个。我错过了什么?还是我误会了什么?非常感谢任何帮助!我正在使用 Rails 3.2.6:
class Forecast < ActiveRecord::Base
attr_accessible :castdate, :level, :user_id
belongs_to :user
class User < ActiveRecord::Base
attr_accessible :defaultcast, :email, :password, :username, :name, :forecast_attributes
has_many :forecasts
accepts_nested_attributes_for :forecasts
在预测控制器中:
def new
@user = User.find(params[:user_id])
@forecast = @user.forecasts.build
@forecasts = Array.new(3) { @user.forecasts.build }
respond_to do |format|
format.html # new.html.erb
format.json { render json: @forecast }
end
end
预测_form:
<%= form_for(:forecasts, :url => user_forecasts_path(@user)) do |f| %>
(我尝试使用上面链接响应中建议的 form_for([@user, :forecasts]) 但收到此错误:未定义的方法 `model_name' for Symbol:Class )
<% @forecasts.each do |forecast| %>
<%= fields_for forecast do |r| %>
<div class="field">
<%= r.label "Date" %><br />
<%= r.date_select :castdate, :start_year => Time.now.year,
:use_two_digit_numbers => true %>
</div>
<div class="field">
<%= r.label "Grump Level" %><br />
<%= r.number_field :level, :min => 0, :max => 10 %>
</div>
<% end %>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>