我已经收到这个错误几天了,我完全被阻止了。我尝试重做模型(我跟随导轨启动指南)并且没有到达任何地方。
表单中的第一个参数不能包含nil或为空
我有time_delta作为一个嵌套的股票类我试图创建一个表单来查看和创建一个股票的节目新的time_deltas我不断收到上述错误。
继承我的time_delta控制器:
class TimeDeltasController < ApplicationController
def new
@stock = Stock.find(params[:stock_id])
@time_delta = @stock.time_deltas.build
respond_with(@time_delta)
end
def create
@stock = Stock.find(params[:stock_id])
@time_delta = @stock.time_deltas.build(params[:stock])
@time_delta.save
end
end
继承我对特定股票的看法
<h1> Stock </h1>
<table>
<tr>
<th>Stock</th>
<th>Hashtag</th>
</tr>
<tr>
<td><%= @stock.name %></td>
<td><%= @stock.hashtag %></td>
</tr>
</table>
<h2>Deltas: </h2>
<table>
<tr>
<th>Stock</th>
<th>Hashtag</th>
</tr>
<% @stock.deltas.each do |delta| %>
<tr>
<td><%= @delta.start %></td>
<td><%= @delta.length %></td>
</tr>
<% end %>
</table>
<h2>Add a TimeDelta:</h2>
<%= form_for([@stock,@time_delta]) do |f| %>
<p>
<%= f.label :start %><br>
<%= f.text_field :start %>
</p>
<p>
<%= f.label :length %><br>
<%= f.text_area :length %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
<%= link_to 'Back', stocks_path%>
<%= link_to 'Edit', edit_stock_path(@stock)%>
以下是我在routes.rb中添加路线的方法:
resources :stocks do
resources :time_deltas
end
任何信息都会非常感激,我真的被卡住了。
编辑:股票控制器的东西
def show
@time_delta = @stock.time_deltas.build
@stock = find_stock
end
private
def find_stock
return Stock.find(params[:id])
end
答案 0 :(得分:0)
错误基本上意味着您未设置要在form_for
由于您是初学者,请让我解释一下它是如何运作的:
form_for
基本上是一个实例方法(帮助器),它接受ActiveRecord对象,并将它们输出到HTML表单中。元素的定义(f.____field
)用于确定输出哪个HTML的方法与所有方法一样,
form_for
具有arguments/parameters,它依赖于respond_with来帮助方法正确运行。form_for
的参数包含格式正确的ActiveRecord对象,这就是每次要使用时都需要调用Model.new
的原因
您的错误意味着该方法无法处理您发送的变量(对象),无论是缺少数据(empty
)还是不存在(nil
)。要解决此问题,正如@vee
所述,您需要确保form_for
正在接收正确的数据
我会试试这个:
class TimeDeltasController < ApplicationController
def new
@stock = Stock.find(params[:stock_id])
@time_delta = @stock.time_deltas.build
respond_with(@stock, @time_delta)
end
def create
@stock = Stock.find(params[:stock_id])
@time_delta = @stock.time_deltas.build(params[:stock])
@time_delta.save
end
end
您应该阅读{{3}}以了解其运作方式
答案 1 :(得分:0)
您正试图在您的股票/显示视图中访问@time_delta变量,但未设置。将以下行添加到StocksController #show action。
@time_delta = @stock.time_deltas.build
编辑:
TimeDelta模型的命名也存在问题,因为在Ruby中'delta'是复数'deltum'。要遵守Rails约定,请将模型名称更改为TimeDeltum,或者告诉Rails使用'delta'作为'delta'的复数形式。您可以了解如何操作here。