Rails选择不在编辑页面上工作

时间:2014-03-13 12:01:35

标签: ruby-on-rails ruby-on-rails-4

对于我的@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

3 个答案:

答案 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 %>

让一切正常,并且不需要对控制器进行任何更改。