我知道这个错误,我知道这意味着什么,但在这种情况下它完全没有意义。我有一个以前运作良好的表格。我有另一种形式几乎一样的工作很好。但是,当我提交数据时,此表单现在会出现此错误:
Showing C:/Sites/mewwd/app/views/wine_lists/_form.html.erb where ine #189 raised:
undefined method `first' for nil:NilClass Rails
_form.html.erb
<%= f.collection_select :wine_list_region_id, @regioes, :id, :regiao , {hide_label: true, :selected => @regioes.first.id} , {:style => "width: 120px",:required => true} %>
控制器
def new
@wine_list = WineList.new
@tipos = WineListType.where(:user_id => [current_user.id, "0"])
@produtores = WineListProducer.where(:user_id => [current_user.id, "0"])
@regioes = WineListRegion.where(:user_id => [current_user.id, "0"])
@dosagens = WineListPriceType.where(:user_id => [current_user.id, "0"])
end
如果正确获取数据,此collection_select!一切都显示它应该的方式,但当我提交我得到那个错误,我不明白为什么。
答案 0 :(得分:0)
我不知道为什么,但如果我把
@wine_list = WineList.new
@tipos = WineListType.where(:user_id => [current_user.id, "0"])
@produtores = WineListProducer.where(:user_id => [current_user.id, "0"])
@regioes = WineListRegion.where(:user_id => [current_user.id, "0"])
@dosagens = WineListPriceType.where(:user_id => [current_user.id, "0"])
在创建动作中它起作用....我从来没有这样做过,这总是在新动作中,但现在这在创建动作中起作用。如果有人设法向我解释为什么我会接受答案
答案 1 :(得分:0)
表单代码取决于@regioes
,以便为表单collection_select
提供值。如果@regios
未初始化,则访问first
方法会导致您看到nil:NilClass
错误。
在典型的Rails应用程序中,new
方法用于设置要呈现到视图形式的变量,create
方法用于处理在视图的表单上输入的值。将它们(通过POST)提交给控制器后的表格。 new
用于显示; create
用于保存。
这个问题意味着行动发生在new
上,方法是在控制器的new
操作中显示代码,显示表单,并在表单中显示错误。表单当然取决于@regios
有一个值,如果失败,则会引发异常。如果@regios
从未在new
控制器中初始化,这是有道理的,尽管代码证明它确实已初始化。
答案中的后续信息表明,初始化@regios
和create
操作中的其他值会导致表单生效。这意味着表单与create
之间存在一些违反GET
和POST
行为分离的非标准关联。如果create
方法以任何方式处理表单(或视图),这将是一个令人不安的情况。
如果信息正确,并且对create
操作所做的更改会以某种方式影响表单,则create
操作会以不恰当的方式参与GET
操作。应该调查和解决原因。目前尚未提供足够的信息来确定其实际原因。这些信息至少是必需的:
new
和create
操作new
和create
行动new
和create
操作的路径定义