对于我的@line
模型,我的表单在我的新行页面上作为部分内容时可以正常工作,但会将undefined method
提升为空?对于nil:NilClass`,当我的编辑页面上有。
“编辑”页面包含:
<%= form_for(@line, :html => { :class => "form-horizontal"} ) do |f| %>
<%= render 'form', f: f %>
<%= f.submit "Submit changes", class: "btn btn-primary" %>
<% end %>
表单看起来像这样(减去div):
<%= f.label :name, class: "control-label" %>
<%= f.text_field :name, placeholder: 'A relatively short line name' %>
<%= f.label :description, class: "control-label" %>
<%= f.text_area :description, placeholder: 'Full line name and any description' %>
<%= f.label :manufacturer_id, class: "control-label" %>
<%= f.select :manufacturer_id, options_from_collection_for_select(Manufacturer.all, :id, :name, {:selected => @line.manufacturer}) %>
<%= f.label :parent_id, class: "control-label" %>
<%= f.select :parent_id, @lines, {:selected => @line.parent, include_blank: true} %>
问题在于最后一个列表中的选项。我正在使用@lines
填充所有现有行的下拉列表。我可能会改变这一点,使用AJAX仅使用属于上面选择的制造商的行来填充它,但是现在我只想让编辑功能正常工作。
我确信这是一个明显的错误,但是没有多少关注此处并且阅读文档到目前为止找到了解决方案。
如果它有用,这是我的控制器操作:
def edit
@line = Line.find(params[:id])
end
def update
@line = Line.find(params[:id])
if @line.update_attributes(line_params)
flash[:success] = "Line updated. #{undo_link}"
redirect_to @line
else
render 'edit'
end
end
答案 0 :(得分:1)
您未在@lines
操作中的任何位置定义edit
,因此当您在视图中将其用作参数时,它将返回nil
。
答案 1 :(得分:0)
您必须更改编辑操作,因为您没有在任何地方定义@lines
:
def edit
@line = Line.find(params[:id])
@likes = Like.all
end
或者您可以将索引操作称为:
def edit
@line = Line.find(params[:id])
index
end
或者您可以更改表单:
= f.select :user_id, Company.all, {:selected => @company.name, include_blank: true}
我认为它会对你有所帮助。
答案 2 :(得分:0)
在尝试上述答案并且如何正确显示下拉列表中的行名后,我已经使用了以下内容:
<%= f.select :parent_id, ("<option></option>" + options_from_collection_for_select(Line.all, :id, :name, {:selected => @line.parent_id})).html_safe %>
让一切正常,并且不需要对控制器进行任何更改。